如何处理自定义事件

How to handle custom events?

本文关键字:自定义 事件 处理 何处理      更新时间:2023-10-16

我尝试了以下操作:

event.h

 class event : public QEvent
 {
 public:
 int Status1;
 int Status2;
 static const QEvent::Type StatusChange = static_cast<QEvent::Type>(1155);
 //Konstruktor
 event(int Status1, int Status2)
 : QEvent(StatusChange) {this->Status1 = Status1; this->Status2= Status2; }
 }

对话.cpp

#include event.h
#include <QApplication>
#include <QWidget>
      void Dialog::on_pushButton2_clicked()
      {
      QWidget *mainWidget;
      foreach(QWidget *widget, QApplication::allWidgets())
      {
        if(widget->windowTitle().toStdString()=="MainWindow") mainWidget=widget;
      }          
      event::event *e = new event::event(1, 1);
      qApp->postEvent(mainWidget, e); 
      }

主窗口.cpp

 #include event.h
 void MainWindow::customEvent(event::event *ev)
 {
 ui->label_2->show();
 }

这只是一个测试设置,所以我将修改customEvent。问题是customEvent根本没有被触发。将事件更改为QEvent时,工作正常。是否有其他方法可以更改QEvent的参数?

QObject有一个名为void QObject::customEvent( QEvent* ev )的方法,您的方法不同,因为您用event::event替换了QEvent。你不是在替换,而是在超载。当Qt调用MainWindow::customEvent时,会调用QEvent版本。

您需要修改您的方法以接受QEvent参数。然后,您可以强制转换参数,以了解此参数是典型的QEvent还是您的自定义类。