2010-03-09 119 views
0

我正在學習QT並嘗試一些例子。插槽功能沒有被調用

我試圖做一個對話框,當一個按鈕被按下時消失一個標籤,並使得它在再次按下同一個按鈕時出現。

以下是代碼。

#include <QApplication> 
#include <QPushButton> 
#include <QLabel> 
#include <QDialog> 
#include <QObject> 
#include <QHBoxLayout> 

int main(int argc, char ** argv) 
{ 
    QApplication app(argc, argv); 
    QDialog *dialog = new QDialog; 
    QPushButton *testButton = new QPushButton(QObject::tr("test")); 
    QLabel * testLabel = new QLabel (QObject::tr("test")); 
    QHBoxLayout * layout = new QHBoxLayout; 
    layout->addWidget(testButton); 
    layout->addWidget(testLabel); 
    QObject::connect(testButton, SIGNAL(toggled(bool)), testLabel, SLOT(setVisible(bool))); 
    dialog->setLayout(layout); 
    dialog->show(); 
    return app.exec(); 
} 

它不工作。每當我按下測試按鈕什麼都不會發生。但是,如果我將信號插槽連接更改爲QObject::connect(testButton, SIGNAL(clicked(bool)), testLabel, SLOT(setVisible(bool)));,則會使標籤消失。

所以,它爲什麼不處理信號「切換」。我猜測的是,它無法找到那個信號。你們可以扔光嗎?

回答

3

您需要添加:

testButton->setCheckable(true); 

要啓用切換。

1

問題是QPushButton不會發出toggled(bool)信號。只有可檢查的小部件,如QCheckBox這樣做。

參見QAbstractButton::toggled信號的第一行:

This signal is emitted whenever a checkable button changes its state.