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