Slot -Funktion wird nicht aufgerufen
-
18-09-2019 - |
Frage
Ich lerne QT und probiere einige Beispiele aus.
Ich versuche, einen Dialog zu erstellen, der ein Etikett verschwindet, wenn eine Taste gedrückt wird, und lässt ihn angezeigt, wenn dieselbe Taste erneut gedrückt wird.
Unten ist der Code.
#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();
}
Es funktioniert nicht. Immer wenn ich die Testtaste drücke, passiert nichts. Aber wenn ich die Signalschlitzverbindungen ändere als QObject::connect(testButton, SIGNAL(clicked(bool)), testLabel, SLOT(setVisible(bool)));
Es lässt das Etikett verschwinden.
Warum funktioniert es also nicht mit Signal "umgeschaltet". Was ich vermute, ist, dass es dieses Signal nicht finden kann. Kannst ihr etwas Licht werfen?
Lösung
Sie müssen hinzufügen:
testButton->setCheckable(true);
Um das Umschalten zu ermöglichen.
Andere Tipps
Das Problem ist, dass QPushButton
'S emittieren nicht die toggled(bool)
Signal. Nur überprüfbare Widgets wie z. QCheckBox
tun.
Siehe die erste Zeile der QAbstractButton::toggled
Signal:
This signal is emitted whenever a checkable button changes its state.