Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

Это кажется возможным в версии Qt Designer 4.5.2, но это невозможно сделать из виджета редактора сигналов / слотов в главном окне.

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

<Ол>
  • Переключитесь в режим редактирования сигналов / слотов (F4).
  • Перетащите из виджета, который должен излучать сигнал, в виджет, который должен получить сигнал.
  • Появится диалоговое окно Настроить соединение , в котором показаны сигналы для отправляющего виджета и слоты для принимающего виджета. Нажмите Изменить ... под столбцом слотов справа.
  • Появится диалоговое окно Сигналы / Слоты ReceivingWidget . Здесь можно щелкнуть значок плюса под слотами, чтобы добавить новый слот с любым именем.
  • Затем вы можете вернуться и подключиться к новому слоту в диалоговом окне Настроить соединение или же в док-панели редактора сигналов / слотов обратно в главное окно.
  • Предупреждение: я использую 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 и всякий раз, когда излучается сигнал, вызывается этот слот.

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

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

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

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top