插槽功能未被调用

时间:2010-03-09 07:20:22

标签: qt4 signals-slots

我正在学习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)));,则会使标签消失。

那么,为什么它不能处理信号“切换”。我猜的是,它无法找到那个信号。你们可以抛光吗?

2 个答案:

答案 0 :(得分:3)

您需要添加:

testButton->setCheckable(true);

启用切换功能。

答案 1 :(得分:1)

问题是QPushButton不会发出toggled(bool)信号。只有可检查的小部件,例如QCheckBox

请参阅QAbstractButton::toggled信号的第一行:

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