Seite 1 von 1

[gelöst] Erzeugung mehrerer Buttons

Verfasst: 4. September 2008 00:44
von Linuxguru
Hallo,

wie schon gesagt, möchte ich mehrere Buttons erzeugen und denen dann auch eine Hintergrundfarbe zuweisen. In meinen Fall handelt es sich da um 17 Buttons.

Momentan mache ich das auf eine nicht so schöne Art und Weise.

Code: Alles auswählen

	QPalette palette;
	QPushButton *button2 = new QPushButton;
	palette = button2->palette();
	palette.setColor( QPalette::Button, QColor(Qt::black) );
	button2->setPalette(palette);
	QPushButton *button3 = new QPushButton;
	palette = button3->palette();
	palette.setColor( QPalette::Button, QColor(Qt::white) );
	button3->setPalette(palette);
	QPushButton *button4 = new QPushButton;
	palette = button4->palette();
	palette.setColor( QPalette::Button, QColor(Qt::darkGray) );
	button4->setPalette(palette);
	QPushButton *button5 = new QPushButton;
	palette = button5->palette();
	palette.setColor( QPalette::Button, QColor(Qt::gray) );
	button5->setPalette(palette);
usw....

Gibt es da evtl. eine Möglichkeit, das über eine for Schleife zu regeln? Ich habe gesehen, das ich bei "enum Qt::GlobalColor" auch über das Value auf die Hintergrundfarbe zugreifen kann. Da hätte ich dann schonmal den Wert den ich beim Durchgehen der Schleife setzen kann.

Mein Vorgehen scheitert daran, das ich aus dem int Wert kein Objekt machen kann.

Code: Alles auswählen

    for( int i = 2; i < 19; i++ )
    {
        QPushButton *i = new QPushButton;
    }
Danke schonmal im Voraus!

Re: Erzeugung mehrerer Buttons

Verfasst: 4. September 2008 07:20
von macman
Linuxguru hat geschrieben:Mein Vorgehen scheitert daran, das ich aus dem int Wert kein Objekt machen kann.

Code: Alles auswählen

    for( int i = 2; i < 19; i++ )
    {
        QPushButton *i = new QPushButton;
    }
Aua, das tat jetzt richtig weh :-) Sowas gehört nach C++ Grundlagen, nur mal nebenbei erwähnt.

Deine Objekte solltest Du in eine Liste packen, damit Du auch später noch darauf zugreifen kannst.

Code: Alles auswählen

    QList<QPushButton*> myButtons;
    for( int i = 2; i < 19; i++ )
    {
        QPushButton* btn = new QPushButton; // irgendein Parent wäre hier nicht schlecht
        // hier noch weitere Zuweisungen für den Button, Farbe, connect, eindeutigen Namen, etc.
        myButtons.append(btn);
    }
Über die Optik verliere ich mal keine Worte, sieht mir eh mehr nach Versuch/Test/Übung aus.

Verfasst: 4. September 2008 12:21
von Linuxguru
Danke macman,

Es war doch schon zu spät gestern Abend. Musste heute noch einige Fehler bei mir korrigieren.
Ich hab das nun so geregelt.

Code: Alles auswählen

	QHBoxLayout *colorLayout = new QHBoxLayout( colorWidget );
	colorLayout->setContentsMargins( 0, 0, 0, 0 );

	QStringList colorNames;
	colorNames 	<< "#000000"
			<< "#ffffff"
			<< "#808080"
			<< "#a0a0a4"
			<< "#c0c0c0"
			<< "#ff0000"
			<< "#00ff00"
			<< "#0000ff"
			<< "#00ffff"
			<< "#ff00ff"
			<< "#ffff00"
			<< "#800000"
			<< "#008000"
			<< "#000080"
			<< "#008080"
			<< "#800080"
			<< "#808000";

	QList<QPushButton*> myButtons;
	for( int i = 0; i < colorNames.size(); i++ )
	{
		QPushButton* btn = new QPushButton;
		btn->setObjectName( colorNames[i] );
		QPalette palette = btn->palette();
		palette.setColor( QPalette::Button, QColor(colorNames[i]) );
		btn->setPalette(palette);
		myButtons.append(btn);
		connect( btn, SIGNAL(clicked()), this, SLOT(setColor()) );
	}

	for( int i = 0; i < myButtons.size(); i++ )
	{
		colorLayout->addWidget( myButtons.at(i) );
	}
Ich danke Dir für Deine Mühe.

Gruss