2011-04-27 78 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.

希望這有助於。