Seite 1 von 1
[Geloest] QDialogButtonBox::addButton nur 1 x ausfuehren
Verfasst: 19. Januar 2008 07:32
von gboelter
Wenn ich mit
Code: Alles auswählen
QDialogButtonBox::addButton ( QAbstractButton * button, ButtonRole role )
einen Button hinzufuege, dann wird dieser Button bei jedem Aufruf der Funktion erneut hinzugefuegt, meine ButtonBox wird also sozusagen immer groesser.
Gibt es einen Weg Qt zu veranlassen diesen Button nur 1 x hinzuzufuegen?
Ich koennte natuerlich eine entsprechende Variable auf true setzen und dann vorher abfraegen, doch erscheint mir das ein wenig sehr primitiv zu sein. Und den Button jedesmal vor verlassen der Funktion mit removeButton zu entfernen klingt fuer mich auch nicht viel eleganter ...
Verfasst: 19. Januar 2008 10:33
von Christian81
Solche Dinge werden normalerweise immer nur einmal aufgerufen - wenn nicht ist dein Ansatz falsch...
Verfasst: 19. Januar 2008 10:59
von PeterLustig
Klingt für mich das er den Dialog einmal erstellt, und dann mehrmals aufruft und jedesmal einen Button hinzufügt. Du solltest den Dialog erst erstellen, wenn du ihn auch benutzt. Dann den Button hinzufügen und anzeigen. Qt kümmert sich um das löschen dann von alleine (oder du machst es).
Verfasst: 19. Januar 2008 11:21
von gboelter
Christian81 hat geschrieben:Solche Dinge werden normalerweise immer nur einmal aufgerufen - wenn nicht ist dein Ansatz falsch...
Was machst Du denn, wenn Du in einer Funktion einen Button hinzufuegen willst, z. B. als Reaktion auf die eine Eingabe in ein LineEdit? Also zum Beispiel damit ....
Code: Alles auswählen
QPushButton *HelpButton;
HelpButton = new QPushButton(tr("&Help"));
HelpButton->setDefault(true);
buttonBoxBanken->addButton(HelpButton, QDialogButtonBox::ActionRole);
Sobald Du dann - aus welchen Gruenden auch immer - ein zweites Mal in diese Funktion kommst, hast Du einen weiteren Button gleichen Namens in Deiner Maske. Und um hier auf Nummer sicher zu gehen, wuerde ich gerne abfragen koennen, ob 'HelpButton' bereits existiert.
Verfasst: 19. Januar 2008 11:26
von Christian81
Ich würde den Button schon beim Initialisieren anlegen und dann nur per show()/hide() ein/ausblenden.
Verfasst: 19. Januar 2008 11:26
von gboelter
PeterLustig hat geschrieben:Klingt für mich das er den Dialog einmal erstellt, und dann mehrmals aufruft und jedesmal einen Button hinzufügt. Du solltest den Dialog erst erstellen, wenn du ihn auch benutzt. Dann den Button hinzufügen und anzeigen. Qt kümmert sich um das löschen dann von alleine (oder du machst es).
Ich habe hier eine recht umfangreiche Routine zur Validierung von Eingaben und genau da bin ich - wie Du richtig erkannt hast - dann ein zweites mal reingelaufen und hatte somit auch einen zweiten Button.
Und damit sich solch ein Fehler nicht wiederholt suche ich nach einer simplem - moeblichst Qt-eigenen - Moeglichkeit sicherheitshalber vorher abzufragen, ob dieser Button nicht doch schon vorhanden ist.
Verfasst: 19. Januar 2008 11:27
von Christian81
Oder man speichert den QPushButton - Pointer.
Verfasst: 19. Januar 2008 11:35
von gboelter
Christian81 hat geschrieben:Oder man speichert den QPushButton - Pointer.
Danke, ich denke, ich werde Deine Idee mit show() und hide() verwenden, zumal da mein Source auch schoen leserlich bleibt.
Bei einem gespeicherten Pointer raetselt man spaeter schon ehe mal, wofuer das denn gut war ...
