Strona 1 z 1

[QT4][C++] Slot z parametrem

: 24 kwie 2009, 14:39
autor: none
Witam chciałbym zrobić slot który miałby parametr na początku dodałem do .h

Kod: Zaznacz cały

public slots:
void slot1(char* data)
{//tu kod}
i chciałbym go wywołać przez

Kod: Zaznacz cały

 connect(ui->button,SIGNAL(clicked()),this,SLOT(slot1("dane")));
Jak to zrobić bo taki kod nie dziala a na google nie moglem nic znalesc
Pozdrawiam

Odp: [QT4][C++] Slot z parametrem

: 24 kwie 2009, 15:22
autor: mikolajs
connect(ui->button,SIGNAL(clicked()),this,SLOT(slot1("dane")));
slot nie może mieć więcej parametrów niż sygnał (może mieć mniej) (clicked ma jeden parametr domyślny typu bool więc występuje tu niezgodność z char*) Jeżeli używasz slot1 tylko w tym połączeniu to po co Ci parametr char* ? Jeżeli chcesz wywoływać z różnych butonów slot i wstawiać różne stringi to należałoby napisać kilka slotów które wywoływałyby wspólną metodę metoda(char* ).
Poza tym czy przypadkiem nie powinno być ui.button, zazwyczaj ui jest zadeklarowane jako składnik klasy?

Odp: [QT4][C++] Slot z parametrem

: 24 kwie 2009, 15:47
autor: none
Własnie o to mi chodziło żeby uniknąć tworzenia 10 slotów tylko zrobić 1 bo wszystkie by działały podobanie tylko wartość char by się zmieniała czyli nie można tego zastąpić 1 slotem?

Odp: [QT4][C++] Slot z parametrem

: 24 kwie 2009, 19:32
autor: mikolajs
Przecież 10 slotów w których uruchamiasz tylko jedną metodę z różnym parametrem nie zajmie dużo miejsca!
Łącząc slot z sygnałem nie podajesz parametrów, sygnał przekazuje slotowi swoje parametry. Podajesz tylko sygnaturę użytej metody:

Kod: Zaznacz cały

connect(object1,SIGNAL(signal1(int, int)),object2,SLOT(slot1(int, int)) );
Nie możesz więc przekazać, wartości parametru.
Całe connect jest przetwarzane przez meta-compiler moc, który tworzy z tego rzeczywisty kod C++.
Możesz też napisać własny button (dziedzicząc), przerobić metody virtualne i stworzyć własny sygnał który będzie wysyłał identyfikator wysyłającego przycisku i wtedy slot może odczytywać go i reagować w zależności od identyfikatora. Ale reimplementując metody virtualne można bardzo namieszać :). Zatem najprościej po prostu napisać te kilka slotów.