【问题标题】:QT and check boxes problemQT 和复选框问题
【发布时间】:2011-08-13 20:02:06
【问题描述】:

可能我要问的很容易,但我被卡住了! :(

我有一个QWidget,我在其中加载了一个QGridLayout,我在其中添加了一些QCheckBox'es

我似乎无法弄清楚如何从复选框中捕获 changestate 信号......

复选框被添加到一个 for 循环中,我在其中创建了一个新的 QCheckBox 并将其作为小部件添加到 qgridlayout...

我应该连接什么? 每个按钮的 changestate 信号到我的自定义插槽,还是其他?

我使用的代码是

QGridLayout *myLayout = new QGridLayout;
for (int i=0; i<(int)m_List.size(); i++)
{
    QCheckBox *button = new QCheckBox;
    button->setText(m_List[i].m_strName.c_str());
    button->setIcon(QIcon(m_List[i].m_strThumbNailPath.c_str()));
    button->setIconSize(QSize(50, 50));
    button->setCheckable(true);
    myLayout->addWidget(button);
    connect(button, SIGNAL(stateChanged), this, SLOT(checkboxStateChanged));
}


myLayout->setRowStretch(2, 10);
myLayout->setColumnStretch(2, 10);

QWidget *myWidget = new QWidget;
myWidget->setLayout(myLayout);

myToolbox = new QToolBox;
myToolbox->addItem(myWidget, "Options");

它正确显示复选框,我可以检查和取消检查它们,但我无法捕捉到信号... 我错过了什么? 谢谢!

【问题讨论】:

    标签: qt signals-slots qcheckbox


    【解决方案1】:

    你的连接有问题(没有签名):

    connect(button, SIGNAL(stateChanged), this, SLOT(checkboxStateChanged)); 
    

    将参数添加到:stateChangedcheckboxStateChanged

    应该是这样的:

    connect(button, SIGNAL(stateChanged(int)), this, SLOT(checkboxStateChanged(int))); 
    

    您将在checkboxStateChanged int 参数中获得复选框状态作为

    Qt::CheckState
    

    枚举值,见here

    【讨论】:

    • 实际上,OP 应该可能连接到SIGNAL(toggled(bool))SIGNAL(stateChanged(int)) 只对三态复选框感兴趣(很少使用)。是的,the documentation 在这里有点误导(toggled(bool) 是在 QAbstactButton 中定义的)。
    • 嗯,我刚刚回答了他的问题(-:
    • 我希望,对于每个使用旧式信号/槽的答案,一些更高级的用户会使用新式信号和槽重新回答。
    【解决方案2】:

    是的,soulSurfer 给出的答案可能会解决您的连接问题,但不是您的问题,还有一条更大的鱼要炸。您将如何了解单击了哪个按钮(我认为这很重要)?

    要了解点击了哪个按钮,您必须使用 QSignalMapperQButtonGroup.

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      • 2021-06-15
      • 1970-01-01
      • 2013-04-27
      相关资源
      最近更新 更多