Seite 1 von 1

trotz QPushButton->setDefault(true) keine Aktion bei Ente

Verfasst: 4. Mai 2010 13:49
von ctwx
Hallo,

ich programmiere zurzeit mit ein paar Freunden einen Spanisch-Konjugationstrainer mit Qt. Den ersten Dialog den man sieht, ist der Login-Dialog, welcher (im groben) 2 Labels, 2 LineEdits und 2 QPushButton enthält.
Einer der Buttons ist der Login-Button, der, wenn man Enter drückt, betätigt werden soll. Laut meinem Buch („C++ GUI Programming with Qt 4 Second Edition“) funktioniert es indem ich einfach die setDefault(true)-Methode meines Login-Buttons aufrufe. Doch in der Praxis funktioniert es nicht.

Hier mein Konstruktor: http://pastebin.com/WMqKbxdJ
Wie man sieht, setze ich auf Zeile 75 den Login-Buttons als Default. Optisch passiert das auch im Dialog, aber wenn ich Enter drücke passiert nichts. Erst wenn ich mit der Maus draufklicke.

Woran liegt das?

Danke,

Gruß
ctwx

Verfasst: 4. Mai 2010 16:24
von solarix
Wenn auf "Ente" nichts passiert solltest du mal "Duck" versuchen...
Im ernst: in der Doku steht:
http://doc.qt.nokia.com/4.6/qpushbutton.html#default-prop hat geschrieben: The default button behavior is provided only in dialogs
Du hast aber anscheinend ein Widget:

Code: Alles auswählen

login::login(QWidget *parent)
        :       QWidget(parent)
Könnte es daran liegen?

Verfasst: 5. Mai 2010 23:01
von ctwx
Es könnte eventuell daran liegen, aber ich kenne es nur so. Ich habe außerdem das Flag auch schon auf Qt::Dialog gesetzt und es änderte sich nichts. :?

Ich habe auch ein Testprogramm geschrieben und dort funktioniert es wie gewünscht.
Testprogramm: Noch Ideen?

Danke,

Gruß
ctwx

Verfasst: 5. Mai 2010 23:14
von solarix
Ja klar funktioniert es dort wie gewünscht.. es IST ja auch ein Dialog:

Code: Alles auswählen

pushButtonDialog::pushButtonDialog(QWidget *parent)
        : QDialog(parent) // das IST ein Dialog...

Code: Alles auswählen

login::login(QWidget *parent)
        :       QWidget(parent) // das ist _KEIN_ Dialog sondern ein Widget!!
hth..