Qt gombok szinezési probláma

Hello!
A köv feladathoz kérénk egy kis segítséget!
Készítsünk dialógus alapú játékot a következők alapján! A játék egy 9x9-es táblán folyik, melynek mind a négy sarkából kivágtunk egy-egy 3x3-es részt. A mezőkön bábuk állnak, kivéve a középsőt. Egy bábuval át lehet ugrani egy másikat, ha az átugrandó bábu után az ugrás irányában közvetlenül üres hely található. Ekkor az átugrott bábut levesszük a tábláról, a másikat pedig áthelyezzük az ugrásnak megfelelően. Ugrani négy irányba lehet: fel, jobbra, le illetve balra. A játék célja, hogy egyetlen bábu maradjon a táblán. Adjon a program lehetőségünk a játék újrakezdésére! Tartsuk nyilván és kérésre jelenítsük meg az 5 legkevesebb bábut fennhagyó játékos nevét és a fennmaradt bábuk számát, ezeket kilépéskor egy szöveges állományba mentsük el, újraindításkor onnan töltsük be!

A gombokat legenerálom és a két kiválasztott gomb közötti gombot nem tudom sehogyse átszinezni
Van valakinek valami ötlete


ifndef BABU_H
#define BABU_H

#include <QApplication>
#include <QWidget>
#include <QProgressBar>
#include <QPushButton>
#include <QString>
#include <QFile>
#include <QTextStream>
#include <QMessageBox>
#include <QStringList>
#include <QLabel>
#include <QFont>
#include <QPixmap>
#include <QPalette>
#include <QDir>

class BabuButton : public QPushButton
{
	public:
		BabuButton(QWidget* parent = 0);
		void setIndex(int i,int j) { sor = i; oszlop = j; }
		int getSor() { return sor; }
		int getOszlop() { return oszlop; }
	private:
		int sor;
		int oszlop;
};

class GameForm : public QWidget
{
		Q_OBJECT
	public:
		GameForm(QWidget *parent = 0);
		void Initialize();
	private:
		bool sel;
		BabuButton **babuk;
		QPushButton *btnQuit;
		QPushButton *btnNew;
		QPushButton *btnTop;
	public slots:
		void newGame();
		void topList();
		//void leptet(int sor, int oszlop);
		void leptet();
	signals:
		void buttonClicked(int i, int j);
};

#endif

//babu.cpp
#include "babu.h"

GameForm::GameForm(QWidget *parent) : QWidget(parent)
{

	const int dbBabu = 45;
	btnQuit = new QPushButton(tr("Quit"), this);
	btnNew  = new QPushButton(tr("New Game"), this);
	btnTop  = new QPushButton(tr("Top List"), this);
	connect(btnQuit, SIGNAL(clicked()), qApp, SLOT(quit()));
	connect(btnNew, SIGNAL(clicked()), this, SLOT(newGame()));
	connect(btnTop, SIGNAL(clicked()), this, SLOT(topList()));
	this->setGeometry(100,10,285,250);
	btnQuit->setGeometry(190,205,80,30);
	btnNew->setGeometry(10,205,80,30);
	btnTop->setGeometry(100,205,80,30);
	sel = false;
	babuk = new BabuButton* [dbBabu];
	for (int j=0; j<9; ++j)
	{

		for (int i=0; i<9; ++i)
		{
			if ((i>2 || j>2) && (i<6 || j<6) && (i<6 || j>2) && (i>2 || j<6))
			{
				QString str, str_i, str_j;
				str_i = str_i.setNum(i);
				str_j = str_j.setNum(j);
				str = str_j + "," + str_i;
				babuk[i,j] = new BabuButton(this);
				babuk[i,j]->setIndex(i,j);

				int sor = babuk[i,j]->getSor();
				int oszlop = babuk[i,j]->getOszlop();
				babuk[i,j]->setGeometry(60+i*20, 10+j*20, 20, 20);
				babuk[i,j]->setPalette(QPalette(Qt::darkBlue));
				if (i==4 && j==4)
				{
					babuk[i,j]->setPalette(QPalette(Qt::white));
				}
				babuk[i,j]->setText(str);
				connect(babuk[i,j], SIGNAL(clicked()), this, SLOT(leptet()));
			}

		}
	}
}

void GameForm::leptet()
{
	BabuButton *button = (BabuButton*)sender();
	if (!sel)
	{
		//button->setEnabled(false);
		button->setPalette(QPalette(Qt::white));
		sel = true;
	}
	else
	{
		button->setPalette(QPalette(Qt::red));
		int i = button->getSor();
		int j = button->getOszlop();
		i--;
		button->setIndex(i,j);
		button->setPalette(QPalette(Qt::green));
		//babuk[0,0]->setPalette(QPalette(Qt::yellow)); //nem valtozik az index alapjan a helye
		/*QMessageBox *about2;
		QString gombok_ii, gombok_jj;
		gombok_ii.setNum(i);
		gombok_jj.setNum(j);
		about2 = new QMessageBox("Index", "Az indexek: " + gombok_jj + "  "+ gombok_ii , QMessageBox::Information, 1, 0, 0, this, 0);
		about2->exec();
		*/

		sel = false;
	}
}

void GameForm::newGame()
{
	Initialize();
}

void GameForm::topList()
{

}

void GameForm::Initialize()
{

}

BabuButton::BabuButton(QWidget* parent) : QPushButton(parent)
{
}

//main.cpp
#include <QApplication>
#include "babu.h"
int main(int argc, char** argv)
{
 QApplication app(argc, argv);
 GameForm* form = new GameForm();
 form->show();
 return app.exec();
}

Hozzászólások

Csak a szinezésre koncentrálva íme egy helyes megoldás:

QPushButton *gomb = new QPushButton("gomb");

QPalette pal = gomb->palette();
pal.setColor(QPalette::Normal, QPalette::Button, QColor(Qt::white));
gomb->setPalette(pal);

Tehát a gomb palette()-je komplexan tárolja minden állapotában (aktív, inaktív, stb) az adott widget színeit. Ezt kimásoljuk egy az egyben egy QPalette-ba. Ott átállítjuk a "normal" működésnél a "button" színt a megadott QColor-ra. Azt feltöltjük vissza a gomb jellemzőit. Remélem érthető :) kicsit nyakatekert, de ha érted, akkor van értelme.

Nem itt kellene megoldatnod az EAF beadandódat. Képzeld, a gyakvezek is olvassák a portált :).

Hello!
Bocsi, de miért gond, hogy segítséget kérek, nem azt kértem senkitől, hogy megoldja az egész feladatot, csak egy résznél megakadtam, ha megoldáss kell az úgyis megszerzem, és mert sok helyen ez a hozzáálás ezért sokan nem használják a levlistát sem. Akkor mondjatok egy helyet ahol segítenek is az emberek? :)