按下任何QPushButton时的应用程序范围记录

问题描述 投票:1回答:1

假设我有一个使用Qt创建的应用程序。在那里,我有一堆QPushBUttons。

我希望能够记录任何QPushButton被按下的时刻。 (申请范围)。假设现有代码应该完整,那么最佳选择是什么?

(从QPushButton派生并重新实现keyPressEvent不是一个解决方案,因为客户端代码将被更改,并且必须使用其他类而不是普通的QPushButton)

c++ qt qt5 qpushbutton
1个回答
2
投票

根据你的指出,你想知道什么时候按下按钮,这通常是当QEvent::MouseButtonPress事件被发送到QPushButton时,为此你必须覆盖QApplication的通知方法

#include <QtWidgets>

class LoggerApplication: public QApplication
{
public:
    using QApplication::QApplication;
public:
    bool notify(QObject *receiver, QEvent *event){
        if(QPushButton *button = qobject_cast<QPushButton *>(receiver))
            if(event->type() == QEvent::MouseButtonPress)
                qDebug()<< button->text();
        return QApplication::notify(receiver, event);
    }
};

int main(int argc, char *argv[])
{
    LoggerApplication a(argc, argv);
    QWidget w;
    QGridLayout *lay = new QGridLayout{&w};
    for(int i=0; i<5; ++i)
        for(int j=0; j<5; ++j)
            lay->addWidget(new QPushButton(QString("%1-%2").arg(i).arg(j)), i, j);
    w.show();
    return a.exec();
}
© www.soinside.com 2019 - 2024. All rights reserved.