我已經在OSG郵件列表中發佈了這個,但郵件列表似乎有點慢。使用OSG的osgViewerQt示例Qt信號/插槽
無論如何,我試圖修改osgViewerQt example通過添加一個新的類我的 自己將包含查看器。設計是:
- wrapper.h:定義類包裝。它從 的QMainWindow繼承和擁有 QDockWidget其中ViewerWidget附會。
- viewer.h:定義ViewerWidget類。這是來自 例子的一個類,有幾個mod。
- prueba_qt.cpp:主函數和創建QApplication的位置。一個包裝對象是 在這裏創建。
該項目編譯,但是當我執行它,我得到一個錯誤:
QWidget: Must construct a QApplication before a QPaintDevice*
如果我刪除Q_OBJECT線,該信號和 包裝的插槽 .h並使用終端編譯文件
g++ -IE:/osg-3.0.1/install/include -LE:/osg-3.0.1/install/bin -IC:/Qt64/4.8/include -LC:/Qt64/4.8/bin -losgViewer -lOpenThreads -losgDB -losg -losgGA -losgQt -lQtCore4 -lQtGui4 prueba_qt.cpp
我可以執行該應用程序。
請問我能做些什麼來做這項工作?我一直在努力奮鬥所有 早上但無法找到解決方案。
謝謝你的時間!
PS:那麼Windows 7的64位#編譯MingW平臺的Qt##4.8 OSG 3.0.1
PS2:我這裏還有我在這個項目中使用的文件,包括從QMAKE的親文件:
wrapper.h
#ifndef Wrapper_hpp
#define Wrapper_hpp
#include "viewer.h"
#include <QtGui/QMainWindow>
#include <QtGui/QDockWidget>
class Wrapper: public QMainWindow {
Q_OBJECT
private:
ViewerWidget* view;
QDockWidget* dock;
public:
Wrapper(void) {
view = new ViewerWidget();
dock = new QDockWidget;
dock->setWidget(view);
dock->setGeometry(100, 100, 800, 600);
dock->setAllowedAreas(Qt::RightDockWidgetArea);
addDockWidget(Qt::RightDockWidgetArea, dock);
dock->show();
}
void Do(void) { view->Do(); }
void Add(void) { view->Add(); }
virtual ~Wrapper(void) {}
public slots:
void MySlot(void) {}
signals:
void MySignal(void);
};
#endif
wrapper.cpp
(這只是因爲我在Qt的論壇讀取MOC只能解析CPP文件,從而需要用於信號/槽機制中的一個的存在。)
#include "wrapper.h"
Wrapper::Wrapper(void) {
view = new ViewerWidget();
// view->setGeometry(100, 100, 800, 600);
dock = new QDockWidget;
dock->setWidget(view);
dock->setGeometry(100, 100, 800, 600);
dock->setAllowedAreas(Qt::RightDockWidgetArea);
addDockWidget(Qt::RightDockWidgetArea, dock);
dock->show();
}
prueba_qt。CPP
#include <QtGui/QApplication>
#include <iostream>
#include "wrapper.h"
int main(int argc, char** argv) {
osg::ArgumentParser arguments(&argc, argv);
QApplication app(argc, argv);
Wrapper wrap;
wrap.resize(800,600);
wrap.setWindowTitle("Cow");
wrap.showNormal();
wrap.Do();
return app.exec();
}
prueba_qt.pro
######################################################################
# Automatically generated by qmake (2.01a) mar 12. mar 13:45:28 2013
######################################################################
QT += core gui
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += . E:/osg-3.0.1/install/include
LIBS += -LE:/osg-3.0.1/install/bin -losg -lOpenThreads -losgDB -losgGA -losgQt -losgViewer
# Input
HEADERS += viewer.h wrapper.h
SOURCES += prueba_qt.cpp wrapper.cpp
viewer.h:這是相當大的,所以我上傳到pastebin
編輯#1
我已經設置了OSG_NOTIFY_LEVEL至DEBUG_INFO並得到了this巨大的輸出。有錯誤的行是:
FindFileInPath() : trying C:\cygwin\bin\osgPlugQWidget: Must construct a QApplication before a QPaintDevice
EDIT#2
的信號和時隙中的代碼失蹤。我剛將它們加到wrapper.h以及撥打Q_OBJECT。