Feld mit Zufallszahlen im Hauptfenster ausgeben

Alles rund um die Programmierung mit Qt
Antworten
Anfänger
Beiträge: 34
Registriert: 11. März 2005 18:17

Feld mit Zufallszahlen im Hauptfenster ausgeben

Beitrag von Anfänger »

Hallo!

Auf folgende Art und Weise habe ich ein Feld erstellt, welches mir Zufallszahlen ausgibt:
void feldBelegung() {
cout << endl;
for (int i=0; i<10; i++)
{ for (int j=0; j<20; j++)
{
feld[j]= ((int)(ceil(((double)rand()/RAND_MAX)*5)));
cout << " " << feld[j];
}
cout << endl;
}

Wie kann ich diese Zahlen nun in einem Hauptfenster:
QWidget* hauptfenster = new QWidget();
hauptfenster->setGeometry(40,60,500,500);

darstellen?!

LG
Anfänger :?:
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Hallo,

nur ein Fenster reicht nicht um deinen Text auszugeben. Du bräuchtest noch ein GUI Element mehr, z.B. ein QTextEdit
mit setText() kannst du dann den gewünschten Text dafür setzen und wenn du den TextEdit als Log definierst, kannst du einfach mit append() deine ganzen Zahlenreihen ausgeben.
Anfänger
Beiträge: 34
Registriert: 11. März 2005 18:17

eigenen Slot definieren mit Zugriff auf eine andere Funktion

Beitrag von Anfänger »

Hallo!
Das mit der Ausgabe der Zufallszahlen hat nun wunderbar geklappt,.
Meine Zufallszahlen werden nun alle ausgegeben.

Nun will ich in meiner Klasse einen eigenen Slot definieren, der wie folgt aussieht:
public slots:
void neuesSpiel() {

feldbelegen(); // Feld wird mit neuen Zufallszahlen gelegt
setBackgroundColor(black);
update();
}
Allerdings wird nur die Hintergrundfarbe geändert, wenn ich auf meinen Button klicke und das Feld nicht neu mit Zufallszahlen belegt.

Irgendwer eine Idee, woran das liegen könnte?

LG
Anfänger
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Wie auch immer du es gesetzt hast...
bei z.B. setText(); muss auch setText() erneut aufgerufen werden, damit neue Werte geschrieben werden. Wenn du folgendes hast:

setText( feld );
1. zeige Text
2. ändere feld
3. zeige Text, dann zeigt er die immernoch den Text von vorher an. Musst also so machen:

setText( feld );
1. zeige Text
2. ändere feld
setText( feld );
3. zeige Text
Anfänger
Beiträge: 34
Registriert: 11. März 2005 18:17

Beitrag von Anfänger »

Habe das folgendermaßen gemacht:
void game::feldbelegen()
{

{srand(time(NULL));}

for (int i=0; i<20; i++)
{
for (int j=0; j<10; j++)
{
feld[j].farbe = ((int)(ceil(((double)rand()/RAND_MAX)*5))) ;// Farbe erzeugen
feld[j].button = new QPushButton ("Button",this) ; // button für das Feld erstellen
feld[j].button->setGeometry((i+1)*35,(j+2)*35,35,35);
feld[j].button->setText( QString( QChar((char)(feld[j].farbe +'0') ) ) );
}
}
}
Anfänger
Beiträge: 34
Registriert: 11. März 2005 18:17

Beitrag von Anfänger »

Habe das glaube ich nicht ganz verstanden, wie ich das dann umsetzen muss, damit neue Zufallszahlen ausgegeben werden :-/ Habe es gerade versucht, aber geklappt hat es nicht.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Denk mit.

du musst erneut die setText Funktion für dein GUI Element aufrufen, wenn sich der Wert geändert hat.

Du solltest dein GUI Element erstellen, dann die Funktion für die Zahlen aufrufen und den Wert jeweils setzen, dann hast du keine Probleme mehr.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Das Problem wird sein, dass du deine Buttons jedesmal neu erstellt werden.

Erstelle deine Buttons, zeichne diese, berechne die Farben, Texte und Positionen neu und setze diese dann, aber auf die bereits erstellten Buttons.
Antworten