Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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

нажмите на виджет правой кнопкой мыши

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

снова щелкните виджет правой кнопкой мыши

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