我有一個包含QGLWidget來繪圖衍生的Widget QMainWindow中衍生的Widget。我將從GLWidget的paintGL中激發一個自定義的事件()方法的方式(該通知應asynchonous,這就是爲什麼我想發佈事件):定製Qt的事件未送達(事件流:小工具裏面 - > QMainWindow中)
QCoreApplication::postEvent(parent(),new ColpickEvent(rgb, pickPoint));
事件看起來是這樣的(很簡單,沒有數據的capsuling):
#define COLORPICK_EVENT QEvent::Type(31337)
class ColpickEvent : public QEvent
{
public:
ColpickEvent(QRgb col, const QPoint& pos)
: QEvent(COLORPICK_EVENT), Color(col), PixelPos(pos) {};
QColor Color;
QPoint PixelPos;
};
的主窗口覆蓋的QObject ::事件(QEvent的*)是這樣的:
#define EVENT_TYPE(ClassName) { ClassName *e = static_cast<ClassName*>(event)
#define END_EVENT } break
#define ACCEPT_EVENT e->accept(); return true
bool MainWindow::event(QEvent* event)
{
switch(event->type())
{
/*... handle other events ...*/
case COLORPICK_EVENT:
EVENT_TYPE(ColpickEvent);
// do something with the data provided by the event ...
ACCEPT_EVENT;
END_EVENT;
/*... handle other events ...*/
}
return QMainWindow::event(event);
}
會發生什麼事是,我ColpickEvent似乎從來沒有分派給MainWindow。任何想法,爲什麼發生這種情況(或實際上不會發生)?
你應該張貼您的解決方案的回答,並接受它,所以它是爲未來的訪客 –
你說的沒錯清晰,但我發現我的解決方案太快 - 我不允許我自己8小時添加一個答案。 – St0fF