カスタム QtDesigner プラグインを作成しました。QtDesigner でうまくロードされ、.ui ファイルで使用でき、実行可能ファイルで正常に動作します。
私の唯一の懸念は、プラグインを別のウィジェットで使用する場合、プラグインの子ウィジェットの値を変更できないことです。
わかりにくい場合は申し訳ありませんが、状況の概略図を次に示します。
MyDesignerPlugin -> QWidget -> QComboBox
-> QTextEdit
QtDesigner では:
MainWindow -> MyDesignerPlugin
そして、基になる QComboBox と QTextEdit にアクセスできません。さて、私は2つの方法を見つけました。最初のものはうまく機能しますが、かなり面倒です。2番目はほとんど機能します。
最初の解決策 - 動作中
まず、QWidget で子ウィジェットのセッターとゲッターを作成すると、Q_PROPERTY マジックのおかげで、QtDesigner のプロパティ エディターにプロパティが表示されます。
これは問題ありませんが、私が望むものではありません。QTextEdit をクリックして、そこから直接テキストを編集できるようにしたいと考えています。これはデフォルトでは不可能です。
2 番目の解決策 - 機能しない
https://qt-project.org/doc/qt-5.0/qtdesigner/containerextension.html#multipagewidget-class-definitionの例を見て、次の行に出くわしましたmultipagewidget.cpp
:
comboBox->setObjectName("__qt__passive_comboBox");
この行をプラグイン ウィジェット (それぞれ"__qt__passive_textEdit"
textEdit 用) に追加すると、QtDesigner でコンボボックスをクリックして選択した値を変更できるようになります。しかし、QtDesigner を閉じて再度開くと、アクション (comboBox で選択したアイテムを変更する) は保存されません。
質問
だから私の質問は2つあります.QtDesignerプラグインを含めるときに子ウィジェットのプロパティを設定するにはどうすればよいですか?この"__qt__passive_..."
文字列はどのような魔法を行いますか?
編集: multipagewidget の例では、comboBox から変更したときに currentIndex が変更されたという事実を保存することもできません。
したがって、今のところ、@ratchet フリークのコメントで提案されているように、Q_PROPERTY ルートを使用します。
変更が保存されるかどうかを確認する方法を知りたい場合は、QtDesigner のプロパティ エディターでプロパティの名前が太字になります。