C++/QT Viele Buttons erstellen.

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
suntsu
Beiträge: 2947
Registriert: 03.05.2002 10:45:12
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: schweiz
Kontaktdaten:

C++/QT Viele Buttons erstellen.

Beitrag von suntsu » 20.02.2005 15:58:23

Tag

Ich versuche mich hier an einem VierGewinnt mit c++ und QT.
Ich möchte die Felder des VierGewinnt mit Buttons darstellen. Ich brauche dafür allerdings 56 Stück davon, und ich finde es nicht so schön diese einzeln zu deklarieren.

Code: Alles auswählen

    QGrid *mainGrid = new QGrid( 6,this ); 
    mainGrid->setGeometry(30, 40, 900, 150);
    QPushButton *button1 = new QPushButton("-- X --", mainGrid);
    QPushButton *button2 = new QPushButton("-- X --", mainGrid);
    QPushButton *button3 = new QPushButton("-- X --", mainGrid);
    QPushButton *button4 = new QPushButton("-- X --", mainGrid);
   usw...
Gibt es eine möglichkeit mehrere Buttons z.B. in einer Schleife zu generieren und ihnen dann dort einen namen(z.B. field1, fieldn) zu geben?

Die einzige information die ich brauche ist die nummer des Button. Das event ist immer das selbe.

gruss
manuel


[/code]

Benutzeravatar
BeS
Moderator
Beiträge: 3236
Registriert: 17.04.2002 18:30:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von BeS » 20.02.2005 16:05:13

Hallo,
du könntest z.B. einen array oder vektor anlegen. Dann gehst du einfach mit einer for-schleife durch und füllst diesen mit QButtonns.
Den Namen kannst du ja aus einem festen string und der Zählervaraible aus der for-schleife erzeugen.

Wenn du die Button nachher nichtmehr brauchst, dann kannst du dir den Vector/Array auch sparen, da du ja nicht unnötig einen pointer auf die Buttons halten mußt.
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support

Ich spreche von Freier Software!

Benutzeravatar
suntsu
Beiträge: 2947
Registriert: 03.05.2002 10:45:12
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: schweiz
Kontaktdaten:

Beitrag von suntsu » 20.02.2005 16:07:38

Salü

Danke schon mal für die Antwort.

Ich habe es mit folgendem versucht.

Code: Alles auswählen

    QPushButton *button[56];
    for(int i = 0;i<55;i++){
         button[i] = new QPushButton(" -- XX --");
      }
Leider scheint das nicht zu funktionieren.

gruss
manuel

edit:
Ich weis auch ned wie ich den Namen eines Buttons zusammensetzen kann.

Code: Alles auswählen

QPushButton button << i =  new QPushButton("test");
funktioniert nicht.

Benutzeravatar
suntsu
Beiträge: 2947
Registriert: 03.05.2002 10:45:12
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: schweiz
Kontaktdaten:

Beitrag von suntsu » 20.02.2005 16:19:12

so ich hab mich selbst disqulifiziert...

Ich hab vorhin den Konstruktor von QPushButton ohne zweiten Parameter aufgerufen.

So funkioniert es....

Code: Alles auswählen

    QPushButton *button[56];
    for(int i = 0;i<55;i++){
         button[i] = new QPushButton(" -- XX --",mainGrid);
      }

gruss
manuel

Benutzeravatar
BeS
Moderator
Beiträge: 3236
Registriert: 17.04.2002 18:30:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von BeS » 20.02.2005 16:36:35

suntsu hat geschrieben: edit:
Ich weis auch ned wie ich den Namen eines Buttons zusammensetzen kann.

Code: Alles auswählen

QPushButton button << i =  new QPushButton("test");
funktioniert nicht.
du könntest es über einen stringstream machen:

Code: Alles auswählen

std::stringstream tmp;
tmp << "button" << i;
und dann tmp.str() als Name für den Button setzen.

EDIT: wenn ich mir dein Beitrag nochmal ansehe, denke ich haben wir aneinander vorbeigeredet. Du hast mit Namen wohl den pointer-namen gemeint. Ich dachte du meinst mit Namen den Namen des widgets. Man kann widgets auch Namen geben unabhängig von einem pointer der auf das Widget zeigt.
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support

Ich spreche von Freier Software!

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 20.02.2005 16:41:31

suntsu hat geschrieben:

Code: Alles auswählen

    QPushButton *button[56];
    for(int i = 0;i<55;i++){
         button[i] = new QPushButton(" -- XX --",mainGrid);
      }
geht "< 55" nicht einen zu wenig weit? Ich hätte jetzt gesagt du brauchst entweder <= 55 oder < 56.

Je nach dem wie du die Sache nachher ansprechen willst würde ich auch eher ein zweidimensionales Array machen, da das ja dem Spielfeld eher entspricht.

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Benutzeravatar
suntsu
Beiträge: 2947
Registriert: 03.05.2002 10:45:12
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: schweiz
Kontaktdaten:

Beitrag von suntsu » 20.02.2005 17:00:23

Da hast du recht....
Auch das mit dem zweidimensionalen Array werde ich mir angucken.

gruss
manuel

Benutzeravatar
suntsu
Beiträge: 2947
Registriert: 03.05.2002 10:45:12
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: schweiz
Kontaktdaten:

Beitrag von suntsu » 20.02.2005 17:24:55

So, hab jetzt auch den Array angepasst.

Code: Alles auswählen

    QGrid *mainGrid = new QGrid( 8,this ); 
    mainGrid->setGeometry(30, 100, 480, 380);
    mainGrid->setMargin(0);
    QPushButton *button[5][7];
    QPixmap *pixmap = new QPixmap("img/white.png");
    for(int iWidth = 0;iWidth<6;iWidth++){
      for(int iHeigh = 0;iHeigh<8;iHeigh++){
         button[iWidth][iHeigh] = new QPushButton(" -- XX --",mainGrid);
         button[iWidth][iHeigh]->setFlat(true);
         button[iWidth][iHeigh]->setPixmap(*pixmap);
         button[iWidth][iHeigh]->setFixedSize(60,60);
      }
    }
gruss
manuel

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 20.02.2005 19:35:56

Jetzt gehst du aber zuweit bzw. das Array ist zu klein

Könntest das Array natürlich auch einfach durchauffüllen nur so am Rande. Also:

Code: Alles auswählen

for(int i = 0; i < 56; i++){
     button[i] = new QPushButton(" -- XX --",mainGrid);
     button[i]->setFlat(true);
     button[i]->setPixmap(*pixmap);
     button[i]->setFixedSize(60,60);
} 
MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Antworten