QT和复选框问题

时间:2011-04-27 12:35:05

标签: qt signals-slots qcheckbox

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

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

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

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

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

我使用的代码是

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");

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

2 个答案:

答案 0 :(得分:3)

您的连接存在问题(无签名):

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

将parementers添加到:stateChangedcheckboxStateChanged

应该是这样的:

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

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

之一
Qt::CheckState

枚举值,请参阅here

答案 1 :(得分:2)

是的,灵魂保健者给出的答案可能会修复你的联系,但不是你的问题,还有更大的鱼可以炒。你怎么理解点击了哪个按钮(我认为这很重要)?

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

希望这有帮助。