長澤様
栗原と申します.
Qtに関しては詳しくないのですが,
メインスレッドから制御しないといけないアプリを使用するコンポーネント
(RTC)を作成した経験がございますので,参考までにコメントさせていた
だきます.
まず,今回のように,Qtなどメインスレッドから処理を開始する必要があるRTC
を作成する場合,<コンポーネント名>Comp.cppのmain()関数内の
manager->runManager();となっている箇所を
manager->runmanager(true)のようにし,その後で使用したいアプリケーション
のメインループを呼び出すといった使われ方が多いようです.
以下に,立命館大学の方が作成されたQtを使ったコンポーネントがありますので,
参考にされてみるのもよいかと思います.
http://openrtm.sakura.ne.jp/cgi-bin/wiki/wiki.cgi/2010/2B13?page=%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB
http://openrtm.sakura.ne.jp/cgi-bin/wiki/wiki.cgi/2010/2B13?page=%A5%C0%A5%A6%A5%F3%A5%ED%A1%BC%A5%C9&file=RMC%2D1%2E2%2E1%2Dwin32%2DOpenRTM%2Ezip&action=ATTACH
以上,宜しくお願い致します.
2013年4月28日 17:48 長澤 哲弥(Nagasawa Tetsuya) :
> OpenRTMメーリングリストの皆様
>
> 名古屋大学大学院修士課程の長澤と申します.
> OpenRTM-aist(C++) 1.0.2上でのGUIライブラリQtの利用について質問がありメールさせていだたきました.
>
> センサ情報をQtを用いて表示させたいと考え,Qtの管理クラスであるQApplicationと,
> QWidgetを継承した自作クラスMyQtのポインタをRTCのクラスに下記のように追加しました.
OpenRTMメーリングリストの皆様名古屋大学大学院修士課程の長澤と申します.OpenRTM-aist(C++) 1.0.2上でのGUIライブラリQtの利用について質問がありメールさせていだたきました.センサ情報をQtを用いて表示させたいと考え,Qtの管理クラスであるQApplicationと,
QWidgetを継承した自作クラスMyQtのポインタをRTCのクラスに下記のように追加しました.------------------------------------------------------------------------------------------------------class PointCloudViewer : public RTC::DataFlowComponentBase
{public: /*! * @brief constructor * @param manager Maneger Object
*/ PointCloudViewer(RTC::Manager* manager);///////////////////中略/////////////////////public:
QApplication *app; //Qt管理クラス myQt *window; //自作クラス};------------------------------------------------------------------------------------------------------
そしてappとwindowにnew演算子を用いて,onInitialize()でインスタンスを割り当て,onExecute()かcoil::Timer上で,イベント処理関数のapp->processEvents()を実行させようと考えました.しかしビルドは通るのですが,QtのGUIを操作することはできませんでした.
そこでonActivate()でインスタンスを割り当てたところ,問題なく操作できたのですが,コンソール上で下記のWarningが表示されます.WARNING: QApplication was not created in the main() thread.
QApplicationのインスタンスをmain()内で作成し,そのアドレスをRTC内に伝えればいいのではないかと考えたのですがその方法がわかりません.