【问题标题】:Add a QGroupBox to a QButtonGroup将 QGroupBox 添加到 QButtonGroup
【发布时间】:2015-04-28 20:51:36
【问题描述】:

我有一组 3 个QRadioButtons 和 2 个可检查的QGroupBoxes,它们都需要互斥。我喜欢将单选按钮添加到 QButtonGroup 以自动处理此问题的便利性,但我似乎无法弄清楚如何将 QGroupBox 添加到按钮组,因为它不继承自 QAbstractButton 并且我不能找到对其复选框的访问权限。

例如,

QRadioButton* rb1 = new QRadioButton("Button1");
QRadioButton* rb2 = new QRadioButton("Button2");
QRadioButton* rb3 = new QRadioButton("Button3");
QGroupBox* gb1 = new QGroupBox;
gb1->setCheckable(true);
QGroupBox* gb2 = new QGroupBox;
gb2->setCheckable(true);
QRadioButton* rb1 = new QRadioButton("Button1");

QButtonGroup* grp = new QButtonGroup;
grp->addButton(rb1);
grp->addButton(rb2);
grp->addButton(rb3);
grp->addButton(gb1);   //these two fail
grp->addButton(gb2);

有没有一种简单的方法可以做到这一点?我知道我可以连接到 QGroupBox 的 clicked() 信号,但我宁愿这样做更干净。

【问题讨论】:

    标签: c++ qt qt4 qgroupbox qbuttongroup


    【解决方案1】:

    您只能将 QAbstractButton 派生类添加到 QButtonGroup 实例。因此,在您的情况下,如果您想将 QGroupBox 作为专有项目之一处理,我认为您需要自己实现它。也许您可以将上述小部件中的所有 SIGNAL 连接到同一个 SLOT,并且在该 SLOT 中,您可以借助 sender 函数更新选中/未选中的小部件:

    QObject* object = sender();
    
    if ( object == groupBox1 )
    {
        // ...
    }
    else if ( object == groupBox1 )
    {
        // ...
    

    但是如果你需要在很多地方这样做,那么你应该为此目的实现某种帮助类。

    【讨论】:

    • 那么没有办法连接到QGroupBox的QCheckBox子吗?例如,我可以使用简单的 QComboBox::lineEdit() 连接到嵌入在 QComboBox 中的 QLineEdit。
    • 但在这种情况下,QLineEdit 是 QComboBox 的成员,但 QGroupBox 可以包含任何数量和任何类型的 QWidget 派生对象......因此没有特定的功能。但也许您可以使用QObject::findChildren 函数来检索 QGroupBox 的 QCheckBox* 子项,然后您可以创建连接。
    猜你喜欢
    • 2012-08-15
    • 2017-07-11
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 2023-03-25
    • 2017-09-25
    • 1970-01-01
    相关资源
    最近更新 更多