スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Qt Creatorでのカスタムプラグインの追加

自分で作ったウィジェットをQt Creator内のDesigner画面でウィジェット一覧に表示させて、GUIでアプリケーションに組み込めるようにする方法はCreating Custom Widgets for Qt Designerに述べられているし、またO'Reillyの「入門Qt4プログラミング」の5章にも書かれている。これらの方法は、実際には、Qt Creatorでプロジェクトの新規作成ウィザードから、「他のプロジェクト」の「Qt カスタム デザイナ ウィジェット」を選択して作成されるスケルトンプロジェクトと同じことをしている。だからこのウィザードを使用してカスタムウィジェットを作ってもいいのだが、最初からこのウィザードを使ってプロジェクトを作成すると、アプリケーション作成の場合と違って若干不便な点がある。それは

1. フォームが作成されないので、UIをGUIで作成できない。
2. デフォルトのアプリケーション(main.cpp)が作成されないので、開発中即座に実行してテストできない。

そこでとりあえず、まずカスタムウィジェット自体は、先に別途「Qt GUIアプリケーション」として作成しておき、ウィジェットが完成した時点で、別に「Qt カスタム デザイナ ウィジェット」としてスケルトンプロジェクトを作成する(名前は両者一致させておく。フォルダは別のところにまずは作成)。「Qt カスタム デザイナ ウィジェット」として作成されたプロジェクトは、フォルダ構成を見ると、ウィジェット本体のソースを格納するフォルダと、プラグインとしてのインターフェースを提供するためのフォルダに分かれている。ウィジェット本体の方のソースフォルダに、先に別途作成しておいた完成済みのウィジェットのソースをコピーしてくればとりえあずは良いわけである。なんかいまいちスマートでない気がするが、とりあえずよしとする。

コピーしてくるのは、該当ウィジェットのクラス名をMyWidgetとすると

MyWidgetフォルダの方に
mywidget.cpp
mywidget.h

MyWidget-build-desktopフォルダの方に
ui_mywidget.h

だけでよい。mywidget.uiファイルも要るかと思ったのだが、このファイルに含まれる内容はビルド時点でXMLからui_mywidget.hにすべて移されているので必要ないようだ。

これで後は問題なくプロジェクトをビルドできるはずである。ただこのカスタムウィジェットを実際にQtCreator/Desginerに認識させて既製ウィジェットと同じように使用するには、2点やっておかなければならないことがある。

1. ビルドディレクトリに作成されたlibmywidgetplugin.soをシステムのQt Desginer用プラグインフォルダ(Fedora 64bitなら /usr/lib64/qt4/plugins/desginer)にインストール。これはroot権限で、ビルドディレクトリ(Makefileとかが生成されているMyWidget-build-desktopフォルダ)でmake installを行えば良い。

2. 上記を行うということは、システムに新しいライブラリがインストールされるということだから…/etc/ld.so.conf.d/qt-x86.64.confを編集、/usr/lib64/qt4/plugins/desginerを追加した上で、

ldconfig

をroot権限で実行して変更を反映させておく。これをやっておかないとこのウィジェットを利用したアプリケーションが実行時にプラグインをロードできない。

本当は、何でもかんでも自作ウィジェットをシステムフォルダにインストールするのも気が進まないので、ホームディレクトリ以下に個人のプラグインフォルダを作成して、これをQt Creatorに認識させたいところなのだが、できるかどうかまだ不明。ツール→オプションの「デザイナー」の項にも追加でプラグインフォルダを指定する項目はなさそうだし、Qt Creator自体をソースからビルドしないとダメな気もしなくもない。
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

GM3D

Author:GM3D
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。