Можно ли изменить поведение по умолчанию проверяемого QGroupBox? - PullRequest
1 голос
/ 10 марта 2020

Вопрос довольно прост: возможно ли изменить поведение по умолчанию проверяемого объекта QGroupBox? Я разработал пользовательский интерфейс со многими объектами QLineEdit внутри проверяемого QGroupBox, желаемое поведение таково: когда QGroupBox не отмечен, все его дочерние элементы включены, а когда отмечен, все его дочерние элементы отключены.

Когда вы можно увидеть в официальной документации QGroupBox, там написано:

Если флажок установлен, дочерние блоки группы включены; в противном случае дети становятся инвалидами и недоступны для пользователя.

1 Ответ

0 голосов
/ 10 марта 2020

Один трюк состоит в том, чтобы изменить рисунок так, чтобы при его проверке проверка не отображалась, и наоборот:

#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();
}
...