функция слота не вызывается - PullRequest
0 голосов
/ 09 марта 2010

Я изучаю 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 ]

3 голосов
/ 09 марта 2010

Вам нужно добавить:

testButton->setCheckable(true);

Для включения переключения.

1 голос
/ 09 марта 2010

Проблема в том, что QPushButton не излучают сигнал toggled(bool).Только проверяемые виджеты, такие как QCheckBox делают.

См. Первую строку сигнала QAbstractButton::toggled:

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