ведение журнала в приложении при нажатии любой QPushButton - PullRequest
1 голос
/ 20 марта 2019

Предположим, у меня есть приложение, созданное с использованием Qt. Там у меня есть куча QPushBUttons здесь и там.

Я хочу иметь возможность регистрировать момент нажатия любой из кнопок QPushButton. (широкое применение). Предполагая, что существующий код должен быть неповрежденным, что будет лучшим вариантом для этого?

(Производный от QPushButton и повторная реализация keyPressEvent не является решением, поскольку клиентский код будет изменен и будет обязательно использовать другой класс, а не обычный QPushButton)

1 Ответ

2 голосов
/ 20 марта 2019

Согласно тому, что вы указали, вы хотите знать, когда нажимается кнопка, что, как правило, происходит, когда событие QEvent::MouseButtonPress отправляется на QPushButton, и для этого вы должны перезаписать метод уведомления * 1003. *

#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();
}
...