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





К сожалению, в Qt4 это невозможно.
В Qt3 вы могли создавать собственные слоты, которые затем реализовывались в файле ui.h. Однако Qt4 не использует этот файл, поэтому пользовательские слоты не поддерживаются.
Некоторое обсуждение этого вопроса есть на QtForum
См. Комментарий от raigon ниже, в настоящее время это возможно.
Кажется, что это просто невозможно.
Дизайнер только позволяет продвигать существующие виджеты в собственные пользовательские виджеты. но он не позволяет подключать сигналы и слоты класса продвигаемых виджетов.
Это возможно путем создания плагина для дизайнера, такого как описано здесь и на следующих за ним страницах.
Обычный способ действий - продвинуть виджет в свой собственный класс, а затем вручную подключить его в своем собственном коде. этот процесс описывается здесь
Это невозможно сделать, потому что это означает, что вы добавили бы слот к существующему классу 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, и всякий раз, когда сигнал испускается, этот слот вызывается.
Кажется, что это возможно в версии Qt Designer 4.5.2, но не могу можно сделать из док-виджета Редактора сигналов / слотов в главном окне.
Это то, что сработало для меня
Предостережение: я использую PyQt, и я пытался использовать только слоты, добавленные таким образом из Python, а не из C++, поэтому ваш пробег может отличаться ...
Обе кнопки «Изменить ...» в диалоговом окне «Настроить соединение» всегда для меня неактивны.
Кнопка «Изменить» в «Настроить соединение» неактивна. Как вы ее нажали?
У меня тоже были серые кнопки, но, наконец, я заметил, что если я подключу сигнал к главному окну, я могу добавить слоты, используя метод, указанный здесь. Кажется, работает так, как ожидалось, но это означает, что вы получаете много методов в главном окне, а не в отдельных виджетах.
Если кнопка редактирования отключена, возможно, вы неправильно выполнили шаг 2. Когда появится окно «Настроить соединение», посмотрите на имена двух столбцов. Имя правого столбца должно быть владельцем пользовательского слота.
Для всех, кто заходит за пределы Google, в Qt 5 вы должны использовать функцию «продвигать виджет», чтобы сделать виджет в редакторе псевдонимом для настраиваемого класса, прежде чем кнопка «Изменить ...» станет доступной для встроенных. в виджетах, отличных от окна верхнего уровня.
Может, это поможет.
По умолчанию вам нужно выбрать из существующего списка слотов. Но вы можете добавить слот, щелкнув правой кнопкой мыши по объекту в списке справа от дизайнера, выбрав «слот / сигналы» и добавив свой собственный слот / сигнал. После этого вы можете выбрать его в редакторе сигналов / слотов.
щелкните виджет правой кнопкой
продвигайте виджет в класс, который вы определили
щелкните виджет правой кнопкой еще раз
вы увидите, что сигнал и слот можно редактировать
Щелкните правой кнопкой мыши в главном окне и выберите «изменить сигналы и слоты» и добавьте новый слот. Он появится в вашем редакторе слотов сигналов.
Я могу это сделать:
В MainWindow.h добавьте строку:
public slots:
void example();
в классе MainWindow.
В MainWindow.cpp
void MainWindow::example() {
<code>
}
Конструктор qt4 поддерживает чтение пользовательских слотов, созданных в формах, портированных из qt3. У меня сложилось впечатление, что его тоже можно создать.