[qt4] signal-slot, pytanie

0

witam
mam małe pytanie dotyczące qt a dokładniej signal-slot:

connect(button, SIGNAL(clicked()), ... );

da sie ustawić taki slot do którego chce przekazać argument?
z góry thx za odpowiedz

0
connect(button, SIGNAL(clicked(string)), jakas_kontorlka, SLOT(jakis_slot(string)));

Generalnie z tego co pamiętam to parametry obu funkcji muszą być takie same.

0

to moze inaczej. robie gre kólko i krzyzyk w qt. ogolem wyglada to tak że stworzyłem podklase QPushButton w której mam obiekt typu State ( czyli enum State { cross, circle, empty }; ) oraz slot setState(State st); w klasie Game tworze dwuwymiarową tablice takich buttonów. i chciałem żeby ich inicjalizacja wygladała mniej wiecej tak:

for(int i = 0; i < 3; i++)
{
    for(int j = 0; j < 3; j++)
    {
        // actualPlayer to zmienna typu: Player 
        connect(buttons[i][j], SIGNAL(clicked()), 
                        buttons[i][j],  SLOT(setState(actualPlayer == krzyzyk ? XOButton::cross : XOButton::circle)));
    }
}

wiec co radzice uzyc w takim przypadku? moze jakiegoś innego mechanizmu niż signal-slot?
z góry thx za odpowiedz

0

Możesz dziedziczyć po QPushButton i zdefiniować sobie nakładkę na standardowy sygnał clicked który będzie przyjmował parametr typu State i wykorzystywał standardowe clicked(). To jedyne co mi na razie przychodzi do głowy.

0
DzieX napisał(a)

Możesz dziedziczyć po QButton i zdefiniować sobie nakładkę na standardowy sygnał clicked który będzie przyjmował parametr typu State i wykorzystywał standardowe clicked(). To jedyne co mi na razie przychodzi do głowy.

a jak to zrobić żeby po kliknięciu buttona on emitował clicked(State st) a nie clicked()?

0

Przechwyć clicked() i wyemituj swoją wersję clicked(). To rozwiązanie jest trochę zamotane, poczekaj może inni mają dziś świeższe głowy :(

W każdym razie wyszło mi takie coś:

enum State { cross, circle, empty };

class qButton : public QPushButton
{
Q_OBJECT
	State s;
public:
	qButton()
	{
		connect(this, SIGNAL(clicked()), this, SLOT(listen()));
	}
	
signals:
	void clicked(State);
protected slots:
	void listen()
	{
		emit clicked(s);
	}
};

1 użytkowników online, w tym zalogowanych: 0, gości: 1