LINUX.ORG.RU

[Qt] Не сигналит сигнал

 


0

0

Стабильно получаю «Object::connect: No such signal сигнатура_сигнал», хотя сигнал с оной сигнатурой описан и в документации, и в заголовке библиотеки, а объект его посылающий точно существует. Как теоретически можно докатиться до жизни такой? Что ещё можно проверить?

★★★★★

namespace'ы проверь, Qt к ним очень странно относится

Gorthauer ★★★★★
()

Может читаешь документацию на предыдущую версию кутэ? Я с таким как-то столкнулся, когда писал прогу по книжке, где описана 4.4, а у меня была 4.6

Zhbert ★★★★★
()

Ещё если в аргументах сигнала присутствуют свои типы, то нужно обязательно зарегистрировать их с помощью:

Q_DECLARE_METATYPE(MyNamespace::MyType)
Dendy ★★★★★
()

Проверь еще, чтоб у сигнала не были заданы имена параметров.

anonymous
()
Ответ на: комментарий от alex_custov

Соединение:

connect( this->zoomer, SIGNAL( zoomed( const QwtDoubleRect &rect ) ),
         this, SLOT( debug( const QwtDoubleRect &rect ) ) );
Вывод в консоль:
Object::connect: No such signal QwtPlotZoomer::zoomed( const QwtDoubleRect &rect ) in /home/ndtimofeev/Проекты/samopisetz/src/samopisetz.cpp:13

KblCb ★★★★★
() автор топика
Ответ на: комментарий от Zhbert

У самого такое было с бизоном. Но в заголовке сигнал есть и имено с этой сигнатурой.

KblCb ★★★★★
() автор топика
Ответ на: комментарий от Dendy

Это обязательно? У меня и без Q_DECLARE_METATYPE сигналы работали.

Rudcozt
()
Ответ на: комментарий от Rudcozt

Вот что бывает если пользоваться сигнало-слотами раз в пол года. Спасибо. Вопрос закрыт.

KblCb ★★★★★
() автор топика
Ответ на: комментарий от KblCb

Вот что бывает если пользоваться сигнало-слотами раз в пол года. Спасибо. Вопрос закрыт.

А всё потому что в Qt сигналы-слоты перректально сделаны.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

Не без этого. Ну хотя бы минимальную проверку типов можно было сделать. Но так альтернативы нет.

KblCb ★★★★★
() автор топика
Ответ на: комментарий от UVV

const не забыл?

Если вы про константные ссылки, то Qt правильно находит перегруженые сигналы/слоты без квалификаторов, когда семантически они означают одно и то же:

Qt uses normalized signatures to decide whether two given signals and slots are compatible. Normalization reduces whitespace to a minimum, moves 'const' to the front where appropriate, removes 'const' from value types and replaces const references with values.

Вот эти записи будут эквивалентны:

connect( this->zoomer, SIGNAL(zoomed(const QwtDoubleRect&)), SLOT(debug(const QwtDoubleRect&)) );
connect( this->zoomer, SIGNAL(zoomed(QwtDoubleRect)), SLOT(debug(QwtDoubleRect)) );
Dendy ★★★★★
()
Ответ на: комментарий от anonymous

Извини, anonymous. Проглядел.

KblCb ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.