2013-06-13 20 views
6

Próbowałem to zrobić:QObject :: connect: Nie można stać w kolejce argumenty typu 'int &'

connect(this, SIGNAL(signalClicked(int&)), classA, SLOT(doWork(int&))); 

Ale pojawia się komunikat w tytule. Więc ja zbadałem internet i wpadłem na to rozwiązanie, które nie działa aswell:

qRegisterMetaType<int&>("Type"); 
connect(this, SIGNAL(signalClicked(Type)), classA, SLOT(doWork(Type))); 

(błąd: nie pasującej funkcji dla wywołania 'qRegisterMetaType (const char [5])')

Jakieś rozwiązania? Dzięki za pomoc.

+0

Czy "#include "? – Angew

+0

Tak, tak, dlatego nie rozumiem ... – Thibel

+0

Dzięki za odpowiedź, ale już znalazłem to rozwiązanie http://www.qtforum.org/article/36440/signal-between-threads.html ? s = e3808660493121294f8780ef018f9b5e98f5b6f4 i niestety nadal nie działa. – Thibel

Odpowiedz

11

Jeśli Qt próbuje kolejkować argumenty, co oznacza, że ​​połączenie jest między wątkami. To nie zadziała dla referencji bez stałych.

Możesz użyć referencji do obejścia tego, ale zdecydowanie sugeruję, abyś ponownie rozważył swój projekt. Przekazywanie wartości przez odniesienie w połączeniach sygnał/gniazdo nie jest dobrym pomysłem.

+0

Wiem, że to nie jest dobry sposób na zrobienie tego, ale jestem nowy w tym i to jest jedyne rozwiązanie, które znalazłem. Właściwie to, co próbuję osiągnąć, to zaktualizować atrybut w głównym wątku i odczytać go z innego wątku w nieskończonej pętli. Spróbuję, co zasugerowałeś. – Thibel

+1

@ Dan-Milburn, ponieważ Qt kopiuje obiekt, dlaczego nie warto przekazywać wartości przez odniesienie? – TheDarkKnight

+0

Jeśli Qt pobiera kopię, jaki jest punkt przejścia przez (nie stały) punkt odniesienia? Gniazdo odbiorcze i tak nie byłoby w stanie zmodyfikować oryginału (jednocześnie wprowadzając go w błąd). Ponadto punkt za sygnałami/gniazdami Qt polega na tym, że nadajnik sygnału nie wie, co jest z nim połączone, ani ile jest połączeń. Jeśli są dwa połączone gniazda, a oni obydwoje próbują zmodyfikować obiekt, który został przekazany przez odniesienie, masz cały szereg potencjalnych błędów. W ograniczonych sytuacjach będzie działał z niekanonicznymi połączeniami, ale nadal jest zły. –