Получение ошибок при использовании Qt Creator для создания сигналов и слотов - PullRequest
3 голосов
/ 14 февраля 2011

Я создал новый диалог, используя Qt Creator (версия 4.7.0) - одну из шаблонных форм (с кнопками ОК и Отмена).

Я хочу, чтобы пользователь ввел некоторые данные в форму, а затем, когда он нажмет кнопку ОК, он сохранит эту информацию. Поэтому я посмотрел и увидел, что при нажатии кнопки «ОК» он отправляет сигнал в слот подтверждения диалога.

Так что я щелкнул правой кнопкой мыши на диалоговом окне в представлении дизайна и выбрал «Перейти в слот ...». Я нажал на «принятую» опцию, которая добавила метод on_Dialog_accepted () в класс диалогов. Однако, когда я запускаю программу и открываю диалоговое окно, в консоли появляется сообщение об ошибке QMetaObject::connectSlotsByName: No matching signal for on_Dialog_accepted()

Так что я сделал не так?

Я нашел документацию по connectSlotsByName - но ничего о каких-либо очевидных ловушках, в которые может попасть неопытный разработчик Qt.

Ответы [ 2 ]

2 голосов
/ 26 февраля 2013

Это в основном так, как объяснил Фред: ты не сделал ничего плохого. Это ошибка QtCreator . И довольно старый в этом отношении. К сожалению, даже через два года ничего в этом отношении не изменилось.

Правообладатель вышеупомянутой ошибки решил как бы перенаправить ее на эту ошибку QtCore , которая просто просит изменить QMetaObject :: connectSlotsByName () так, чтобы она также обрабатывает переданный объект, а не только его дочерние элементы (тем самым устраняя проблему с QtCreator).

Я посмотрел на источник и представил тривиальный патч .

Обновление : Патч принят, это означает, что эта ошибка будет исправлена ​​ в Qt 5.1 . Примечание: не имеет значения, какую версию QtCreator вы используете, но с какой версией Qt вы связываете свой код.

2 голосов
/ 14 февраля 2011

Щелчок правой кнопкой мыши по диалоговому окну в представлении конструктора перед выбором «Перейти к слоту ...» установил соединение из сигналов диалога с слотом диалога, которое не работает с QMetaObject :: connectSlotsByName (), поскольку этот метод ищет все дочерние объекты, но не сам объект.

На самом деле вы хотели щелкнуть правой кнопкой мыши на кнопке ОК, а затем выбрать «Перейти к слоту ...». Затем он создаст слот с именем вашего виджета кнопки, и соединение будет установлено правильно во время выполнения.

Нет смысла, что QtDesigner позволяет вам выбрать «Перейти к слоту ...» в диалоге. Возможно, вы захотите сообщить об ошибке разработчикам Qt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...