概要
Qtライブラリには多くのウィジェットが含まれており、その中にテーブル、木構造、リストなどのコンテナウィジェットも含まれています。
QtDesignerを使用したことがある方は都知道、このツールにはプロパティエディタがあり、VSのプロパティパネルと同様のプロパティブラウザコントロールです。
今回はQTreeWidgetをベースにしたプロパティコントロールであるQtTreePropertyBrowserを紹介します。このコントロールはまだQtの正式なバージョンには含まれていません。
ソースコードのダウンロード
QtTreePropertyBrowserを使用するには、まずGitHubからソースコードをダウンロードし、自分でコンパイルする必要があります。
下图はGitHubのコミット履歴ですが、提交時点から既に9년이経過しているため、コードの古さが感じられるかもしれません。
コードのコンパイル
古いため、Qt5でコンパイルするにはいくつかの問題を解決する必要があります。以下の9つの主要な修正點について説明します。
1. intersect関数をintersectedに変更
//旧コード
area.intersect(QRect(0, 0, width(), height()));
//新コード
area.intersected(QRect(0, 0, width(), height()));
2. UnicodeUTF8の削除
QApplication::UnicodeUTF8を削除します。前のカンマも必ず削除してください。
3. QtGuiモジュールの分割
Qt4からQt5への大きな変更点として、QtGuiモジュールの多くの機能がQtWidgetsモジュールに分割されました。QtGuiをQtWidgetsに変更してください。
//旧コード
#include <QtGui/QWidget>
//新コード
#include <QtWidgets/QWidget>
4. Q_TYPENAMEエラー
グローバル置換でQ_TYPENAMEをtypenameに置き換えてください。
5. qVariantValueエラー
グローバル置換でqVariantValue()をqvariant_cast()に置き換えてください。
6. qFindChildrenエラー
Qt5ではqFindChildren()が廃止され、findChildren()で代替可能です。
//旧コード
QList<QtIntPropertyManager *> intManagers = qFindChildren<QtIntPropertyManager *>(manager);
//新コード
QList<QtIntPropertyManager *> intManagers = manager->findChildren<QtIntPropertyManager *>();
7. setMovableの削除と変更
//旧コード
setMovable()
//新コード
setSectionsMovable()
8. setResizeModeの変更
//旧コード
setResizeMode()
//新コード
setSectionResizeMode()
9. QtWidgetsモジュールの追加
プロジェクトごとにQtWidgetsモジュールを追加する必要があります。
実行結果
コンパイルが完了すると、複数の実行ファイルが生成されます。そのうちのsimple.exeを実行すると、以下のような結果が得られます。
参考記事
- Qt-解锁QtPropertyBrowser控件
- Qt5.4.2编译 qtpropertybrowser-2.51(从4修改到5的除错過程)