2011-04-27 101 views
0

可能我所问的很容易,但我卡住了! :(QT和复选框问题

我有一个QWidget在我打开一个QGridLayout中,我添加了一些QCheckBox“ES

我似乎无法弄清楚如何捕捉从复选框的改变状态的信号... 。

的复选框中添加循环,其中我创建了一个新的QCheckBox 这和将其添加为一个小部件的qgridlayout ...

我应该连接什么? 每个按钮更改状态信号到我的自定义插槽或som还有什么?

我使用的代码是

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

它正确显示复选框,我可以检查,并取消选中它们,但我不能赶上信号... 我失去了什么? 谢谢!

回答

3

你的连接有问题(无签字):

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

的parementers添加到:stateChangedcheckboxStateChanged

应该是这样的:

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

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

枚举值,见here

+2

事实上,OP应该可能连接到'SIGNAL(切换(布尔))'。 'SIGNAL(stateChanged(int))'只对tristate复选框很有用(很少使用)。是的,[文档](http://doc.trolltech.com/4.7/qcheckbox.html)在这里有点误导(改为在'QAbstactButton'中定义''tedggled(bool)')。 – 2011-04-27 12:52:08

+0

嗯,我刚刚回答了他的问题( - : – snoofkin 2011-04-27 12:53:53

+0

我希望,对于使用旧式信号/插槽的每个回答,一些更高级的用户会通过新的样式信号和插槽重新回答。 – neuronet 2014-06-27 01:14:16

2

是的,灵魂冲浪手可能给出的答案将解决您的连接,但不是你的问题,有一个更大的鱼鱼苗。你怎么知道哪个按钮被点击了(我认为它很重要)?

要了解哪个按钮被点击,你将不得不使用QSignalMapperQButtonGroup.

希望这有助于。