如何处理自定义事件?

时间:2014-09-17 11:26:13

标签: c++ events

我尝试过以下方法:

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; }
 }

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

mainwindow.cpp

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

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

1 个答案:

答案 0 :(得分:0)

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

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