标签: qcheckbox

QT - 取消选中复选框

伙计们,请让我知道如何使用QT C++取消选中复选框.

c++ qt qcheckbox

5
推荐指数
2
解决办法
1万
查看次数

tableview中的checkbox和itemdelegate

我正在做一个继承自QitemDelegate的CheckBox的实现,把它放到QTableView中.

问题是我在插入时向左冲,我需要它居中.

据我所知,负责Paint的方法.我写的如下:

void CheckBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
bool checkValue;

QStyleOptionButton BtnStyle;
BtnStyle.state = QStyle::State_Enabled;

if(index.model()->data(index, Qt::DisplayRole).toBool() == true)
{
BtnStyle.state |= QStyle::State_On;
checkValue = true;
}else{
BtnStyle.state |= QStyle::State_Off;
checkValue = false;
}


BtnStyle.direction = QApplication::layoutDirection();
BtnStyle.rect = option.rect;
QApplication::style()->drawControl(QStyle::CE_CheckBox,&BtnStyle,painter );
QApplication::style()->drawControl(QStyle::CE_CheckBox,&BtnStyle,painter );
}
Run Code Online (Sandbox Code Playgroud)

什么缺少出现居中?

所以我有委托:

.H

class BooleanWidget : public QWidget
{
    Q_OBJECT
    QCheckBox * checkBox;

    public:
    BooleanWidget(QWidget * parent = 0)
    {
        checkBox = new QCheckBox(this);
        QHBoxLayout * layout = new …
Run Code Online (Sandbox Code Playgroud)

qt qtableview qitemdelegate qcheckbox

5
推荐指数
2
解决办法
1万
查看次数

增加Qt中文本和复选框之间的空间

如果设置固定的复选框大小,则文本将与复选框本身对齐.使用标准布局方向,文本将在框后面开始,并且从右到左布局它将在框之前结束,就像这样(边框只是窗口小部件的边框以指示窗口小部件的实际大小,不要混淆):

有没有办法将文本与另一方对齐以实现此目的:

在此输入图像描述

c++ qt qcheckbox

5
推荐指数
1
解决办法
3257
查看次数

QTableView 中仅可编辑复选框的列

我有一个带有复选框的列QTableView。该复选框由以下生成:

  1. 返回Qt::ItemIsUserCheckable覆盖的flags成员函数
  2. 在重写的data()函数中,我根据数据返回一个Qt::CheckStateforrole == Qt::CheckStateRole

有效,见截图。

但在复选框旁边,我在列中有一些可编辑的文本框。我怎样才能摆脱这个文本框(我在其中输入了“dsdsdsds”进行演示?澄清一下,复选框应该是可编辑的,但没有别的。

读取模式 编辑模式


根据要求,我只能显示简化版

Qt::ItemFlags MyClass::flags(const QModelIndex &index) const {
 Qt::ItemFlags f = QAbstractListModel::flags(index);
 ... return f if index is not target column ....
 // for target column with checkbox
 return (f | Qt::ItemIsEditable | Qt::ItemIsUserCheckable; )
}


QVariant MyClass::data(const QModelIndex &index, int role) const {
  .. do something for other columns
  .. for checkbox column
  if (role != Qt::CheckStateRole) { …
Run Code Online (Sandbox Code Playgroud)

c++ qwidget qtableview qcheckbox qt5.3

5
推荐指数
1
解决办法
5837
查看次数

更改QCheckBox的复选框位置

我在网格布局中有一个QCheckbox,定义如下:

self.isSubfactorCheckbox = QtGui.QCheckBox('Is &subfactor', self)
Run Code Online (Sandbox Code Playgroud)

默认情况下,该复选框位于"Is subfactor"文本的左侧.我希望将其移至案文右侧.

我试过玩次控制位置,但无济于事.

self.isSubfactorCheckbox.setStyleSheet('QCheckBox::indicator{subcontrol-origin: content; subcontrol-position: top right;}')
Run Code Online (Sandbox Code Playgroud)

这会将复选框向右移动(它仍然在文本的左侧),但它会将文本向右推出窗口的边缘.

这无助于将文本移到右侧:

self.isSubfactorCheckbox.setStyleSheet('QCheckBox::text{subcontrol-origin: content; subcontrol-position: top left; }')
Run Code Online (Sandbox Code Playgroud)

一个解决方案是创建一个QLabel并在其右侧添加复选框,但我没有找到一种方法来在QLabel中加下划线字母,以便用户知道哪个是快捷键.我已经尝试用字母前缀字母和/或将它们包装在<u> </u>标签中.

我仍然只想使用QLabel,但是如何在没有文本被推出的情况下将复选框切换到文本的右侧.

qt pyqt pyqt4 qcheckbox

4
推荐指数
1
解决办法
7340
查看次数

如何在 QListView 中设置复选框的样式以使标签位于复选框下方?

我有一个水平的QListView,我想使用样式表自定义内部的复选框和标签,以将标签放在复选框下方,而不是右侧。

如何做呢?

qt stylesheet qlistview qcheckbox

3
推荐指数
1
解决办法
6475
查看次数

QStyledItemDelegate:如何使复选框按钮在单击时更改其状态

我有一个MyDelegate用于QListWidget. 委托派生自QStyledItemDelegate. 的目标之一MyDelegate是在ListWidget. 它是在以下paint()事件中完成的MyDelegate

void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QStyledItemDelegate::paint(painter, option, index);
    // ... drawing other delegate elements

    QStyleOptionButton checkbox;
    // setting up checkbox's size and position

    // now draw the checkbox
    QApplication::style()->drawControl(QStyle::CE_CheckBox, &checkbox, painter);
}
Run Code Online (Sandbox Code Playgroud)

起初我认为复选框会在单击时自动更改其状态,因为我指定了QStyle::CE_CheckBox. 但事实并非如此。看起来我必须手动指定复选框的视觉行为。

数据方面,当用户单击该复选框时,会发出某些信号并更改场景数据。我在editorEvent()以下位置执行此操作:

bool MyDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)  
{
    if (event->type() == QEvent::MouseButtonRelease) { …
Run Code Online (Sandbox Code Playgroud)

qt qcheckbox qstyleditemdelegate

3
推荐指数
2
解决办法
5403
查看次数

QCheckBox状态改变PyQt4

我正在尝试在 PyQt4 中实现一个系统,其中取消选中复选框将调用函数disable_mod,选中它将调用enable_mod。但即使状态正在改变,复选框也会调用它们开始时的初始函数。对于这种情况,如果单击了已经选中的框,它总是会继续调用disable_mod函数!我不明白为什么会发生这种情况?你们能帮我一下吗?这是我的代码:

from PyQt4 import QtCore, QtGui
from os import walk
from os.path import join
import sys

def list_files_regex(dir):
    l = []
    for (root, dirnames, filenames) in walk(dir):
        for d in dirnames:
            list_files_regex(join(root, d))
        l.extend(filenames)
    return l

directory = "J:/test_pack"
directory = join(directory, "/mods")

count = 0
for y in list_files_regex(directory):
    print y
    count += 1
print count

class ModEdit(QtGui.QMainWindow):
    def __init__(self, title, icon, x, y, w, h):
        super(ModEdit, self).__init__()
        self.setWindowTitle(title)
        self.setWindowIcon(QtGui.QIcon(icon))
        self.setGeometry(x, y, w, h)
        self.choices = [] …
Run Code Online (Sandbox Code Playgroud)

python qt pyqt qcheckbox

3
推荐指数
1
解决办法
1万
查看次数

Python PyQt-取消选中所有其他复选框的复选框

我正在尝试进行一些验证,例如:

  • 当任一“选择”“选择B”被选中,“没有选择”将自动取消选中
  • 选中“未选择”时,将自动取消选中“选择A”“选择B”

但是,当我运行此代码时,单击任何复选框将取消选中所有 3个复选框。

即窗口初始化时选中“未选择”。但是,当我单击“选择A”时,它取消了“未选择”的选择,但没有选中“选择A”

我究竟做错了什么?


import sys
import PyQt5

class Test(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        checkBoxNone = QCheckBox("None Selected")
        checkBoxA    = QCheckBox("Select A")
        checkBoxB    = QCheckBox("Select B")

        checkBoxNone.setChecked(True)
        checkBoxNone.stateChanged.connect(lambda checked: (checkBoxA.setChecked(False), checkBoxB.setChecked(False)))
        checkBoxA.stateChanged.connect(lambda checked: checkBoxNone.setChecked(False))
        checkBoxB.stateChanged.connect(lambda checked: checkBoxNone.setChecked(False))

        grid = QGridLayout()

        grid.addWidget(checkBoxNone, 1, 0)
        grid.addWidget(checkBoxA, 2, 0)
        grid.addWidget(checkBoxB, 3, 0)

        self.setLayout(grid)
        self.setWindowTitle('Test')
        self.show()

if __name__ == '__main__': …
Run Code Online (Sandbox Code Playgroud)

python lambda pyqt qcheckbox pyqt5

3
推荐指数
1
解决办法
2684
查看次数

更改QCheckBox指示器矩形颜色

我试图只改变QCheckBox指示矩形的颜色.

目前我成功绘制了矩形的右边和底线.可能我在这里做错了.

这是我的代码:

CheckBoxWidget.cpp

CheckBoxWidget::CheckBoxWidget(QObject *poParent)
    : QItemDelegate(poParent)
{
}

void CheckBoxWidget::drawCheck( QPainter *painter,
                                const QStyleOptionViewItem &option,
                                const QRect & rect,
                                Qt::CheckState state) const
{
    QRect oCheckBoxRect =
            QApplication::style()->subElementRect( QStyle::SE_CheckBoxIndicator, &option);

    painter->setPen(Qt::white);
    painter->drawRect(oCheckBoxRect);

    QItemDelegate::drawCheck(painter, option, oCheckBoxRect, state);
}
Run Code Online (Sandbox Code Playgroud)

CheckBoxWidget.h

class CheckBoxWidget : public QItemDelegate
{
    Q_OBJECT

public:
    CheckBoxWidget(QObject *poParent = 0);
    virtual ~CheckBoxWidget();

protected:
    virtual void drawCheck( QPainter *painter,
                            const QStyleOptionViewItem &option,
                            const QRect &,
                            Qt::CheckState state) const;
};
Run Code Online (Sandbox Code Playgroud)

有什么建议 ?

qt qitemdelegate qcheckbox

2
推荐指数
1
解决办法
1万
查看次数

Python - 将复选框添加到 QTableWidget 中的每一行

我正在尝试向 QTableWidget 中的每一行添加一个复选框,不幸的是它似乎只出现在第一行。这是我的代码:

data = ['first_row', 'second_row', 'third_row']
nb_row = len(data)
nb_col = 2

qTable = self.dockwidget.tableWidget
qTable.setRowCount(nb_row)
qTable.setColumnCount(nb_col)
chkBoxItem = QTableWidgetItem()

for row in range(nb_row):
    for col in [0]:
        item = QTableWidgetItem(str(data[row]))
        qTable.setItem(row,col,item)
    for col in [1]:
        chkBoxItem.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
        chkBoxItem.setCheckState(QtCore.Qt.Unchecked)       
        qTable.setItem(row,col,chkBoxItem)
Run Code Online (Sandbox Code Playgroud)

我错过了一些明显的东西吗?

我还检查了以下帖子:

python pyqt qtablewidget qcheckbox

1
推荐指数
1
解决办法
7459
查看次数