我必須創建2個自定義事件。 我跟着這個鏈接&使我的代碼: -
Is there a cleaner way to register Qt custom events?創建併發布定製的Qevent
是它創建&後&一些數據(QString的)傳遞到自定義事件的正確方法?
==============================================每庫巴奧伯sugession =============
編輯代碼:---
Mainwindow.h: -
UpdateEvent *myUpdateEvent ;
ClearEvent *myClearEvent ;
Mainwindow.c: - -
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
i =0;
myUpdateEvent = new UpdateEvent("hello");
myClearEvent = new ClearEvent("bye");
QCoreApplication::postEvent(this, myUpdateEvent);
QCoreApplication::postEvent(this, myClearEvent);
}
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
qDebug() << "oo";
if (UpdateEvent::is(event)) {
UpdateEvent *tempUpdateEvent = static_cast<UpdateEvent *>(event);
qDebug() << tempUpdateEvent->value();
}
else if (ClearEvent::is(event)) {
ClearEvent *tempClearEvent = static_cast<ClearEvent *>(event);
qDebug() << tempClearEvent->value();
}
return true;
}
event.h file: -
template <typename T> class StringEvent : public QEvent
{
QString m_str;
public:
explicit StringEvent(const QString val) : QEvent(staticType()), m_str(val)
{
}
QString setvalue(QString val)
{
m_str = val;
}
QString value() const
{
return m_str;
}
static QEvent::Type staticType()
{
static int type = QEvent::registerEventType();
return static_cast<QEvent::Type>(type);
}
static bool is(const QEvent * ev)
{
return ev->type() == staticType();
}
};
class UpdateEvent : public StringEvent<UpdateEvent>
{
public:
explicit UpdateEvent(QString val): StringEvent(val)
{
}
};
class ClearEvent : public StringEvent<ClearEvent>
{
public:
explicit ClearEvent(QString val): StringEvent(val)
{
}
};
爲什麼eventFilter沒有被觸發?而且我無法在postevent上看到調試消息?
感謝..從這件事吸取線程很多C++的概念......最後一件事情metafactory意味着一個類中的類? – Katoch
@Katoch:一個metafactory是一個爲你生成其他類的類。在這裏,'Update'和'Clear'是在每個使用點爲你生成正確的嵌套'Event'類的元分析。我[問另一個問題](http://stackoverflow.com/q/19187469/1329652)獲取社區反饋,瞭解是否有任何簡單的方法。 –
我會建議我們的工作也可以在不使用模板類的情況下完成......因爲我們根本沒有在我們的字符串事件類中使用模板變量T ......如本例所示... http:// www .cprogramming.com/tutorial/templates.html ....你說什麼...? – Katoch