Всякий раз, когда я использую диалоговое окно редактора сигналов/слотов, мне приходится выбирать из существующего списка слотов. Итак, вопрос в том, как мне создать пользовательский именованный слот?
Как создать собственный слот в дизайнере qt4?
Ответы (10)
К сожалению, это невозможно в Qt4.
В Qt3 вы можете создавать собственные слоты, которые затем реализуются в файле ui.h. Однако Qt4 не использует этот файл, поэтому пользовательские слоты не поддерживаются.
Эта проблема обсуждается на QtForum.
щелкните правой кнопкой мыши в главном окне и выберите «Изменить сигналы и слоты» и добавьте новый слот. Он появится в вашем редакторе слотов сигналов.
Кажется, это возможно в версии Qt Designer 4.5.2, но это нельзя сделать с помощью док-виджета Signal/Slot Editor в главном окне.
Это то, что сработало для меня
- Переключитесь в режим Редактировать сигналы/слоты (F4)
- Перетащите от виджета, который должен излучать сигнал, к виджету, который должен получить сигнал.
- Появится диалоговое окно Настройка подключения, в котором показаны сигналы для передающего виджета и слоты для принимающего виджета. Нажмите Изменить... под столбцом слотов справа.
- Появится диалоговое окно Сигналы/слоты принимающего виджета. Здесь можно щелкнуть значок плюса под слотами, чтобы добавить новый слот с любым именем.
- Затем вы можете вернуться и подключиться к новому слоту в диалоговом окне Настроить соединение или в виджете-док-станции Редактора сигналов/слотов в главном окне.
Предупреждение: я использую PyQt, и я пытался использовать слоты, добавленные таким образом, только из Python, а не из C++, поэтому ваш пробег может отличаться...
Я могу сделать это:
В MainWindow.h добавьте строку:
public slots:
void example();
в классе MainWindow.
В MainWindow.cpp
void MainWindow::example() {
<code>
}
Это не кажется возможным простым способом.
Дизайнер позволяет вам продвигать существующие виджеты только к вашим собственным виджетам. но не позволяет подключить сигналы и слоты класса продвигаемых виджетов.
Это возможно, если создать плагин для дизайнера, как описан здесь и на последующих страницах.
Обычный порядок действий заключается в повышении уровня виджета до вашего собственного класса, а затем при подключении его вручную в вашем собственном коде. этот процесс описан здесь
Это невозможно сделать, потому что это означает, что вы добавите слот в существующий класс Qt, такой как QPushButton
, что на самом деле не так.
В конечном итоге вы должны создать свой собственный QWidget
, создав подкласс существующего. Затем интегрируйте его в Qt Designer в качестве плагина, как было предложено. Наличие собственного класса позволяет вам добавлять/изменять доступные сигналы/слоты по вашему желанию.
Не забывайте о функциях автоподключения слота. Есть несколько недостатков, например, необходимость переименовывать вашу функцию, если вы переименовываете свой виджет, но мы часто используем их в моей компании.
Вы можете использовать формат волшебного слота
void on_objectName_signal() {
// slot code here, where objectname is the Qt Designer object name
// and the signal is the emission
}
Соединение с этим методом устанавливается методом connectSlotsByName и всякий раз, когда сигнал испускается, этот слот вызывается.
Может быть, это поможет.
По умолчанию вы должны выбрать из существующего списка слотов. Но вы можете добавить слот, щелкнув правой кнопкой мыши объект в списке справа от дизайнера, выбрав «слот/сигналы» и добавив свой собственный слот/сигнал. После этого вы можете выбрать его в редакторе сигналов/слотов.
щелкните виджет правой кнопкой
продвигать виджет в класс, который вы определили
щелкните виджет правой кнопкой еще раз
вы увидите, что сигнал и слот доступны для редактирования