C++ 按下任何QPushButton时应用程序范围的日志记录

C++ 按下任何QPushButton时应用程序范围的日志记录,c++,qt,qt5,qpushbutton,C++,Qt,Qt5,Qpushbutton,假设我有一个使用Qt的应用程序。 我这里那里有一堆按钮 我想能够记录任何一个按钮被按下的时刻。(应用程序范围)。假设现有的代码应该是完整的,那么最好的选择是什么 (从QPushButton派生并重新实现keyPressEvent不是一个解决方案,因为客户端代码将被更改,并且必须使用其他类而不是普通的QPushButton)根据您指出的,您想知道按钮何时被按下,通常,当QEvent::MouseButtonPress事件发送到QPushButton时,必须覆盖QApplication的notify

假设我有一个使用Qt的应用程序。 我这里那里有一堆按钮

我想能够记录任何一个按钮被按下的时刻。(应用程序范围)。假设现有的代码应该是完整的,那么最好的选择是什么


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

根据您指出的,您想知道按钮何时被按下,通常,当
QEvent::MouseButtonPress
事件发送到
QPushButton
时,必须覆盖
QApplication的notify方法

#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();
}
#包括
类日志应用程序:公共QApplication
{
公众:
使用QApplication::QApplication;
公众:
bool notify(QObject*接收器,QEvent*事件){
如果(QPushButton*按钮=qobject_cast(接收器))
如果(事件->类型()==QEvent::MouseButtonPress)
qDebug()文本();
返回QApplication::notify(接收者、事件);
}
};
int main(int argc,char*argv[])
{
日志应用程序a(argc、argv);
qw;
QGridLayout*lay=新的QGridLayout{&w};
对于(int i=0;i