[C++, QTimer] Dostęp do danych z poziomu slotu
Ostatnio zmodyfikowano 2013-09-04 20:16
look997 Temat założony przez niniejszego użytkownika |
[C++, QTimer] Dostęp do danych z poziomu slotu » 2013-09-04 03:59:12 Chcę w QTimer przekazać argument do slota.
Z tego co wyczytałem to jest niemożliwe, jednak chciałbym aby funkcja slot wiedziała kto się do niej odnosi i na podstawie tego, jaką opcję z instrukcji warunkowej wewnątrz tej funkcji ma wybrać.
Jeśli nie chcecie podać konkretnego rozwiązania to chociaż powiedzcie czy w C++ istnieje coś w rodzaju event.target z JavaScriptu lub jakiś inny sposób na osiągnięcie tego celu. |
|
DejaVu |
» 2013-09-04 10:57:40 |
|
look997 Temat założony przez niniejszego użytkownika |
» 2013-09-04 15:41:09 Takie coś: int ddd = 1; ShotTimer->singleShot( 9000, this, SLOT( mielenie( ddd ) ) ); Mam 3 opcje i chcę poinformować funkcję mielenie(), którą opcję wybrałem. Jak jest jakiś inny sposób bez użycia zmiennej to proszę podać. Na marginesie: Dałem takie jak najbardziej ogólne pytanie bo jak bym zapytał konkretnie o zmienne a rozwiązanie byłoby bez ich wykorzystania to już byłby więcej niż jeden temat i pewnie b ktoś temat usunął bo jeden temat jeden post. |
|
DejaVu |
» 2013-09-04 16:44:09 jeden temat = jeden problem, a nie jeden temat = jeden post. Tematy nie mają być ogólne bo w IT rozwiązuje się konkretne problemy, a nie problemy niezdefiniowane.
Dodaj do klasy MyObj zmienną:
int & m_ddd;
MyObj( int & ddd ) : m_ddd( ddd ) { }
metoda MySlot nie jest statyczna, więc widzi wszystkie dane obiektu, a tym samym będziesz miał również dostep do zmiennej m_ddd . |
|
look997 Temat założony przez niniejszego użytkownika |
» 2013-09-04 17:12:37 Tyle, że u mnie jest tak: void OknaKlasa::mielenie( int ddd ) { liczMiel += 1; if( liczMiel == licz ) { if( ddd == 0 ) { kontrolZ->setStyleSheet( "background-color: rgb(120,20,100); font-size:8px; color: black;" ); } else if( ddd == 1 ) { kontrolJ->setStyleSheet( "background-color: rgb(120,20,100); font-size:8px; color: black;" ); } else { kontrolD->setStyleSheet( "background-color: rgb(120,20,100); font-size:8px; color: black;" ); } } }
void OknaKlasa::Shot( int ddd ) { licz += 1; ShotTimer->singleShot( 9000, this, SLOT( mielenie( ddd ) ) ); kontrol->setStyleSheet( "background-color: rgb(120,120,200); font-size:8px; color: black;" ); }
void OknaKlasa::Shot() { licz += 1; ShotTimer->singleShot( 9000, this, SLOT( mielenie() ) ); kontrol->setStyleSheet( "background-color: rgb(120,120,200); font-size:8px; color: black;" ); }
OknaKlasa::OknaKlasa( QWidget * parent ) : QMainWindow( parent ) , ui( new Ui::OknaKlasa ) { ui->setupUi( this ); Shot( Zero ); Shot( Jeden ); Shot( Dwa ); } Jeśli da się inaczej lub prościej określić której opcji dotyczy wybór to proszę podać. Może całość jest niepotrzebnie utrudniona przez moją niewiedzę? |
|
DejaVu |
» 2013-09-04 20:07:33 Dostałeś już rozwiązanie. Skoro nie da się przekazać do 'slota' argumentu to dlaczego to robisz? |
|
look997 Temat założony przez niniejszego użytkownika |
» 2013-09-04 20:16:49 Tylko tak napisałem żeby było wiadomo jaki mam cel. |
|
« 1 » |