2

问题很简单:是否可以更改可检查的 QGroupBox 对象的默认行为?我在一个可检查的 QGroupBox 中设计了一个包含许多 QLineEdit 对象的用户界面,所需的行为是:当未选中 QGroupBox 时,它的所有子项都启用,并且当它被选中时,它的所有子项都被禁用。

正如您在官方 QGroupBox 文档中看到的那样,它说:

如果选中该复选框,则启用组框的子项;否则,孩子将被禁用并且用户无法访问。

4

1 回答 1

0

一个技巧是修改绘画,以便在检查时不显示检查,反之亦然:

#include <QtWidgets>

class GroupBox: public QGroupBox{
public:
    using QGroupBox::QGroupBox;
protected:
    void paintEvent(QPaintEvent *){
        QStylePainter paint(this);
        QStyleOptionGroupBox option;
        initStyleOption(&option);
        if(isCheckable()){
            option.state &= ~(isChecked() ? QStyle::State_On : QStyle::State_Off);
            option.state |= (isChecked() ? QStyle::State_Off : QStyle::State_On);
        }
        paint.drawComplexControl(QStyle::CC_GroupBox, option);
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    GroupBox groupBox;
    groupBox.setCheckable(true);
    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(new QLineEdit);
    vbox->addWidget(new QLineEdit);
    vbox->addWidget(new QLineEdit);
    vbox->addStretch(1);
    groupBox.setLayout(vbox);
    groupBox.show();

    return a.exec();
}
于 2020-03-10T05:55:42.440 回答