[gelöst] Erzeugung mehrerer Buttons

Alles rund um die Programmierung mit Qt
Antworten
Linuxguru
Beiträge: 96
Registriert: 14. Januar 2007 02:09

[gelöst] Erzeugung mehrerer Buttons

Beitrag 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!
Zuletzt geändert von Linuxguru am 4. September 2008 12:22, insgesamt 1-mal geändert.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Erzeugung mehrerer Buttons

Beitrag 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.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Linuxguru
Beiträge: 96
Registriert: 14. Januar 2007 02:09

Beitrag 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
Antworten