#c #qt #qt5 #qpushbutton
#c #qt #qt5 #qpushbutton
Вопрос:
Предположим, у меня есть приложение, созданное с использованием Qt. Там у меня есть куча QPushButtons здесь и там.
Я хочу иметь возможность регистрировать момент нажатия любой из QPushButton. (в масштабах всего приложения). Предполагая, что существующий код должен быть неповрежденным, что будет лучшим вариантом для этого?
( Производное от QPushButton и повторная реализация keyPressEvent не является решением, поскольку клиентский код будет изменен и будет обязательным для использования другого класса, а не обычного QPushButton )
Ответ №1:
В соответствии с тем, что вы указали, вы хотите знать, когда нажата кнопка, что в общем случае означает отправку 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{amp;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();
}