Вызов событий из основной функции - PullRequest
3 голосов
/ 31 марта 2020

Я был использован, в java, чтобы создавать события почти где угодно, но в c ++ ( Qt ) я заметил, что вы должны создать класс, чтобы иметь возможность использовать события объекта. У меня следующий вопрос: можно ли использовать MouseEvent (или любое другое событие), принадлежащее QPushButton из основной функции?

#include <QApplication>
#include <QWidget>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication app(argc,argv);

    QWidget window;

    QPushButton* btn = new QPushButton("Add",&window);

    //Here, an event related to 'btn' to update the window...

    window.show();

    return app.exec();
}

PS: я знаю, что лучше использовать форму Qt Designer, но я просто спрашиваю о возможности выполнения этой задачи.

Ответы [ 3 ]

2 голосов
/ 31 марта 2020

Некоторые события, например движение мыши или изменение фокуса, недоступны через слоты / сигналы.

Вы можете использовать небольшой прокси-объект QObject для фильтрации событий для других объектов. См. installEventFilter() для примера кода. Вам не нужно на самом деле фильтровать события; Вы можете просто прослушать и позволить им пройти.

Аналогично, вы можете инициировать / подделать событие вручную через QCoreApplication через notify().

1 голос
/ 31 марта 2020

Как отмечает Джоэл Боденманн, Qt использует сигналы и слоты. Вы можете иметь слот на QObject, но Qt также может подключаться к лямбде. Ваша лямбда должна была захватить window по ссылке, чтобы она могла обновлять окно.

Возможно, вы захотите подключить событие clicked.

0 голосов
/ 31 марта 2020

Qt предлагает механизм signal & slots . Вы можете просто подключить сигнал QPushButton::clicked() к слоту, который затем выполняет обновление, на которое вы ссылаетесь.

Использование лямбды C ++ 11:

// Create pushbutton
QPushButton* btn = nw QPushButton("Add",&window);

// Connect slot to 'clicked' signal
QObject::connect(btn, &QPushButton::clicked, []{
    qDebug("Button clicked!");
    // ... whatever else you want to happen on a button click
});

Имейте в виду, что вы есть другие проблемы в вашем коде, как указано в комментариях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...