Seite 1 von 1

Mehrere Buttons hinzufügen und wieder löschen [gelöst]

Verfasst: 18. April 2010 17:33
von rvb
Hallo Forum,

ich möchte während der Programmlaufzeit das GUI ändern bzw ein paar Buttons hinzufügen und zu einem späteren Zeitpunkt wieder löschen. Von der Möglichkeit alle Buttons anfangs hinzuzufügen und bis zum Gebrauch zu verstecken habe ich gelesen, das ist aber nicht was ich beabsichtige.

Das Erstellen von einzelnen Buttons klappt mit folgendem Code schon ganz gut:

Code: Alles auswählen

QPushButton* b1 = new QPushButton(tr("B1 "), this);
gridLayout->addWidget(b1,1,1,1,1, Qt::AlignCenter);
b1->show();
Allerdings ist mir nicht ganz klar, wie ich das mit mehreren machen muss, da jeder Button ja einen anderen Namen bekommen soll.

Code: Alles auswählen

while (query.next()) {
QString Buttonname = query.value(record.indexOf("Name")).toString();
// hier neuen Button mit Buttonname erzeugen (b1,b2,b3,b4)
}
Grüße
Roland


[/code]

Verfasst: 18. April 2010 18:02
von upsala
Was meinst du mit Namen? Object-Namen oder Beschriftung? Oder etwa Veriable?

Beschriftung: Die Buttons werde doch alle anders Beschriftet, je nachdem was in der Datenbank steht.

Variable: Beschäftige dich mal mit QList.

Verfasst: 18. April 2010 18:20
von rvb
Angenommen die Datenbank liefert (b1,b2,b3),
dann soll durch das while folgendes passieren:

Code: Alles auswählen

QPushButton* b1 = new QPushButton(tr("B1 "), this);
gridLayout->addWidget(b1,1,1,1,1, Qt::AlignCenter);
b1->show(); 

QPushButton* b2 = new QPushButton(tr("B2 "), this);
gridLayout->addWidget(b2,1,1,1,1, Qt::AlignCenter);
b2->show(); 

QPushButton* b3 = new QPushButton(tr("B3 "), this);
gridLayout->addWidget(b3,1,1,1,1, Qt::AlignCenter);
b3->show(); 

Verfasst: 18. April 2010 18:40
von rvb
Danke, das mit der Liste war die richtige Idee:

Code: Alles auswählen

QList <QPushButton*> ButtonListe;
int i=0;
while (query.next()) {
ButtonListe.append(new QPushButton("name"));
QPushButton* temp = ButtonListe.at(i);
gridLayout_addhere->addWidget(temp,1,1,1,1, Qt::AlignCenter);
temp->show();
i++;
}


Verfasst: 18. April 2010 19:39
von upsala
Jetzt sollte man nur noch den addWidget-Aufruf umschreiben, sonst ist das ganze Layout umsonst.

Verfasst: 19. April 2010 07:30
von rvb
:oops:

Code: Alles auswählen

QList <QPushButton*> ButtonListe;
int i=0;
while (query.next()) {
ButtonListe.append(new QPushButton("name"));
QPushButton* temp = ButtonListe.at(i);
gridLayout_addhere->addWidget(temp,i,1,1,1, Qt::AlignCenter);
temp->show();
i++;
}