我尝试过以下方法:
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
的参数吗?
答案 0 :(得分:0)
QObject
有一个名为void QObject::customEvent( QEvent* ev )
的方法您的方法不同,因为您将QEvent
替换为event::event
。你不是在替换,而是在超载。当Qt调用MainWindow::customEvent
时,会调用QEvent
版本。
您需要修改方法以接受QEvent
参数。然后,您可以转换参数以了解此参数是典型的QEvent
还是您的自定义类。