Как создать собственный слот в дизайнере qt4?

Всякий раз, когда я использую диалоговое окно редактора сигналов/слотов, мне приходится выбирать из существующего списка слотов. Итак, вопрос в том, как мне создать пользовательский именованный слот?


person user24560    schedule 03.10.2008    source источник


Ответы (10)


К сожалению, это невозможно в Qt4.

В Qt3 вы можете создавать собственные слоты, которые затем реализуются в файле ui.h. Однако Qt4 не использует этот файл, поэтому пользовательские слоты не поддерживаются.

Эта проблема обсуждается на QtForum.

person David Dibben    schedule 03.10.2008
comment
Дизайнер qt4 поддерживает чтение пользовательских слотов, созданных в формах, перенесенных из qt3. У меня сложилось впечатление, что его тоже можно создать. - person user24560; 03.10.2008
comment
См. комментарий Райгона ниже, в настоящее время это возможно. - person OliJG; 31.05.2013

щелкните правой кнопкой мыши в главном окне и выберите «Изменить сигналы и слоты» и добавьте новый слот. Он появится в вашем редакторе слотов сигналов.

person raigon    schedule 22.01.2012

Кажется, это возможно в версии Qt Designer 4.5.2, но это нельзя сделать с помощью док-виджета Signal/Slot Editor в главном окне.

Это то, что сработало для меня

  1. Переключитесь в режим Редактировать сигналы/слоты (F4)
  2. Перетащите от виджета, который должен излучать сигнал, к виджету, который должен получить сигнал.
  3. Появится диалоговое окно Настройка подключения, в котором показаны сигналы для передающего виджета и слоты для принимающего виджета. Нажмите Изменить... под столбцом слотов справа.
  4. Появится диалоговое окно Сигналы/слоты принимающего виджета. Здесь можно щелкнуть значок плюса под слотами, чтобы добавить новый слот с любым именем.
  5. Затем вы можете вернуться и подключиться к новому слоту в диалоговом окне Настроить соединение или в виджете-док-станции Редактора сигналов/слотов в главном окне.

Предупреждение: я использую PyQt, и я пытался использовать слоты, добавленные таким образом, только из Python, а не из C++, поэтому ваш пробег может отличаться...

person Rob Smallshire    schedule 06.09.2009
comment
Обе кнопки «Изменить...» в диалоговом окне «Настроить соединение» всегда недоступны для меня. - person James; 08.11.2009
comment
Кнопка «Изменить» в «Настроить соединение» отключена. Как вы ее нажали? - person ; 19.10.2011
comment
У меня тоже были серые кнопки, но, наконец, я заметил, что если я подключу сигнал к главному окну, я могу добавить слоты, используя метод, описанный здесь. Кажется, работает так, как ожидалось, но это означает, что вы получаете множество методов в главном окне, а не в отдельных виджетах. - person tom stratton; 03.08.2012
comment
Если кнопка редактирования отключена, возможно, вы неправильно выполнили шаг 2. Когда появится окно «Настроить соединение», посмотрите на имена двух столбцов. Имя правого столбца должно быть владельцем пользовательского слота. - person Honest Abe; 23.08.2015
comment
Для тех, кто бродит вне Google, под Qt 5 вы должны использовать продвигать виджет, чтобы сделать виджет в редакторе псевдонимом для пользовательского класса до того, как кнопка "Изменить..." станет доступной для нажатия на встроенных виджетах, отличных от окна верхнего уровня. - person ssokolow; 12.09.2016

Я могу сделать это:

В MainWindow.h добавьте строку:

public slots:
     void example();

в классе MainWindow.

В MainWindow.cpp

void MainWindow::example() {
     <code>
}
person James Dalton    schedule 09.10.2012

Это не кажется возможным простым способом.

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

Это возможно, если создать плагин для дизайнера, как описан здесь и на последующих страницах.

Обычный порядок действий заключается в повышении уровня виджета до вашего собственного класса, а затем при подключении его вручную в вашем собственном коде. этот процесс описан здесь

person shoosh    schedule 03.10.2008

Это невозможно сделать, потому что это означает, что вы добавите слот в существующий класс Qt, такой как QPushButton, что на самом деле не так.

В конечном итоге вы должны создать свой собственный QWidget, создав подкласс существующего. Затем интегрируйте его в Qt Designer в качестве плагина, как было предложено. Наличие собственного класса позволяет вам добавлять/изменять доступные сигналы/слоты по вашему желанию.

person Pierre    schedule 03.10.2008

Не забывайте о функциях автоподключения слота. Есть несколько недостатков, например, необходимость переименовывать вашу функцию, если вы переименовываете свой виджет, но мы часто используем их в моей компании.

person Caleb Huitt - cjhuitt    schedule 03.10.2008

Вы можете использовать формат волшебного слота

void on_objectName_signal() {
// slot code here, where objectname is the Qt Designer object name
// and the signal is the emission
}

Соединение с этим методом устанавливается методом connectSlotsByName и всякий раз, когда сигнал испускается, этот слот вызывается.

person Henrik Hartz    schedule 14.01.2009

Может быть, это поможет.

По умолчанию вы должны выбрать из существующего списка слотов. Но вы можете добавить слот, щелкнув правой кнопкой мыши объект в списке справа от дизайнера, выбрав «слот/сигналы» и добавив свой собственный слот/сигнал. После этого вы можете выбрать его в редакторе сигналов/слотов.

person l0kix2    schedule 09.04.2011

щелкните виджет правой кнопкой

продвигать виджет в класс, который вы определили

щелкните виджет правой кнопкой еще раз

вы увидите, что сигнал и слот доступны для редактирования

person snow    schedule 31.12.2011