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?

War es hilfreich?

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.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top