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
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
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.
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
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.
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()?
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);
}
};