按下任何 QPushButton 时应用程序范围的日志记录
application wide logging when any QPushButton being pressed
假设我有一个使用 Qt 制作的应用程序。
我到处都有一堆 QPushBUttons。
我希望能够记录按下任何 QPushButton 的时刻。 (应用范围)。假设现有代码应该完好无损,最好的选择是什么?
(从 QPushButton 派生并重新实现 keyPressEvent 不是解决方案,因为客户端代码将被更改并且必须使用其他 class 而不是普通的 QPushButton )
根据您所指出的,您想知道何时按下按钮,这通常是 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();
}
假设我有一个使用 Qt 制作的应用程序。 我到处都有一堆 QPushBUttons。
我希望能够记录按下任何 QPushButton 的时刻。 (应用范围)。假设现有代码应该完好无损,最好的选择是什么?
(从 QPushButton 派生并重新实现 keyPressEvent 不是解决方案,因为客户端代码将被更改并且必须使用其他 class 而不是普通的 QPushButton )
根据您所指出的,您想知道何时按下按钮,这通常是 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();
}