[Qt]Signals and slots.
Ostatnio zmodyfikowano 2015-02-03 20:25
Harrel Temat założony przez niniejszego użytkownika |
[Qt]Signals and slots. » 2015-02-03 00:57:11 Witam. Mam problem z połączeniem sygnałów i slotów. Załóżmy, że mam tablice wskaźników na obiekty QLineEdit i chcę połączyć sygnał jaki one imitują (textChanged(QString)) ze slotem. Mniej więcej użycie 'connecta' wygląda tak: for( int i = 0; i < 16; i++ ) { QObject::connect( lineEdits[ i ], SIGNAL( textChanged( QString ) ), this, SLOT( textChangedSlot( QString ) ) ); }
Ale tu pojawia się właśnie problem bo nie będę w stanie rozróżnić który obiekt wyemitował sygnał (czy to lineEdits[0] czy też lineEdits[15]). Pierwszą moją głupią myślą było dodanie dodatkowego argumentu do slota: QObject::connect( lineEdits[ i ], SIGNAL( textChanged( QString ) ), this, SLOT( textChangedSlot( QString, i ) ) );
Ale oczywiście nie ma prawa to działać i mimo to że nawet program sie kompiluje w takiej postaci to najzwyczajniej w świecie funkcja connect nie hula. No i tu moje pytanie - jak to zrobić aby hulało? Problem wydaję się pospolity, więc myślę, że rozwiązanie jest całkiem trywialne. |
|
Monika90 |
» 2015-02-03 13:07:02 |
|
Harrel Temat założony przez niniejszego użytkownika |
» 2015-02-03 13:58:11 Działa idealnie. Mimo tego, że średnio rozumiem składnie tej funkcji, to rozwiązuje ona problem. Dzięki wielkie! |
|
turaz |
» 2015-02-03 20:25:06 Hej. 1. Możesz użyć lambdy tak jak to pokazała Monika90 2. Możesz w slocie wykonać qobject_cast na sender'ze, czyli tak: void textChangedSlot( const QString & text ) { QLineEdit * lineedit = qobject_cast < QLineEdit *>( sender() ); }
i posługiwać się tym wskaźnikiem |
|
« 1 » |