すでにOSGメーリングリストに投稿していますが、少し遅いようです。
とにかく、ビューアを含む独自の新しいクラスを追加して、 osgViewerQtの例を変更しようとしています。デザインは次のとおりです。
- wrapper.h :クラスWrapperを定義します。QMainWindowから継承し 、ViewerWidgetが接続されるQDockWidgetを備えてい ます。
- Viewer.h:ViewerWidgetクラスを定義します。これは例のクラスで、私がいくつかのmodを使用しています。
- prueba_qt.cpp:メイン関数とQApplicationが作成される場所。ここでラッパーオブジェクトが作成されます。
プロジェクトはコンパイルされますが、実行するとエラーが発生します。
QWidget: Must construct a QApplication before a QPaintDevice*
Q_OBJECT行、シグナル、およびスロットを wrapper.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:SOはWindows 7 64ビット#MingWコンパイラ#Qt 4.8#OSG 3.0.1
PS2:qmakeのproファイルを含め、このプロジェクトで使用したファイルは次のとおりです。
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ファイルしか解析できないため、シグナル/スロットメカニズムに1つ必要であると読んだためにのみ存在します。)
#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に設定し、この巨大な出力を取得しました。エラーのある行は次のとおりです。
FindFileInPath() : trying C:\cygwin\bin\osgPlugQWidget: Must construct a QApplication before a QPaintDevice
編集#2
信号とスロットがコードにありませんでした。Q_OBJECTの呼び出しとともに、それらをwrapper.hに追加しました。