Qtカスタムプラグイン

参照ブログ:https://blog.csdn.net/giselite/article/details/12622429
プラグインの紹介:
    Qt Designerのプラグインベースのアーキテクチャにより、標準のQtコントロールと同じように、ユーザー定義およびサードパーティのカスタムウィジェットを編集できます。ウィジェットのプロパティ、シグナル、スロットなど、すべてのカスタムウィジェット関数がQtDesignerに提供されます。Qt Designerは設計プロセスで実際のパーツを使用するため、カスタムパーツはプレビュー中の設計フェーズのパーツと同じになります。
 
 
    図に示すように、Designerにはカスタムプラグイン(Clock、Qled)とサードパーティプラグイン(QWT)が含まれています。では、最初に効果を見てみましょう。後で、実現方法について具体的な説明があります。時間をかけてください。
 
    Qt Designerのカスタムウィジェットを統合するには、適切なウィジェットと適切な.proファイルが必要です。
 
インターフェイスの説明を提供します
    ウィジェットのタイプを提供すること をQtDesignerに通知 するには、ウィジェットによって公開されるさまざまな属性を記述するQDesignerCustomWidgetInterfaceのサブクラスを作成する必要があり ます。これらのほとんどは、基本クラスの純粋仮想関数によって提供されます。プラグインのみ作成者がこの情報を提供できます。

シリアルナンバー

関数

戻り値の説明

1

名前()

プラグインのクラス名を提供します

2

グループ()

コントロールが属するグループのQtDesignerのウィジェットボックス

3

toolTip()

ユーザーがQtDesignerでコンポーネントを識別するのに役立つ簡単な説明

4

これは何ですか ()

QtDesignerユーザー向けに設計されたコンポーネントの詳細説明

5

includeFile()

ヘッダーファイルは、プラグインを使用するアプリケーションにインクルードする必要があります。この情報はUIファイルに保存され、カスタムプラグインの形式でコードを含めるために適切な#includesステートメントがUICによって作成されます。

6

アイコン()

QtDesignerのプラグインボックスにある小さなウィンドウのアイコン

7

isContainer()

trueは、コンポーネントがサブコンポーネントの保存に使用されることを意味します。それ以外の場合はfalseです。

8

 

 

 

9

 

 

10

createWidget()

 

 

domXml()

 

 

codeTemplate()

提供された親を構築する、カスタムウィジェットへのQWidgetポインターのインスタンス。

注:createWidget()はファクトリメソッドであり、ウィジェットを作成する機能のみを担当します。カスタムウィジェットのプロパティは、load()が戻るまで使用できません。

 

オブジェクト名、サイズヒント、およびQWidget属性の他の標準的な説明など、ウィジェットの属性を説明します。

 

この関数は、QtDesignerが将来使用するために予約されています

 
    他の2つの仮想機能も再実装できます

シリアルナンバー

関数

戻り値の説明

11

initialize()

カスタムウィジェット拡張機能およびその他の機能を設定します。この関数では、カスタムコンテナ拡張機能(QDesignerContainerExtensionを参照)とタスクメニュー拡張機能(QDesignerTaskMenuExtensionを参照)を設定する必要があります。

12

isInitialized()

コンポーネントが初期化されている場合はtrueを返し、そうでない場合はfalseを返します。再実装は通常、initialize()関数が呼び出されたかどうかを確認し、このテストの結果を返します。

 

   
 
domXml()関数に関する注意:
    domXml()関数は、UIファイルのコードスニペットを返し、Qt  Designer ウィンドウファクトリを使用してカスタムウィジェットを作成し、機能を使用します。
    Qt4.4以降、Qt  Designer のウィジェットを使用すると、完全なUIファイルでカスタムウィジェットを記述できます。UIファイルはタグを使用してロードできます。指定されたタグを使用すると、カスタムウィジェットに関するその他の情報を含む要素を追加できます。これ以上の情報が必要ない場合は、ラベルで十分です。
    カスタムウィジェットが適切なサイズを提供しない場合は、サブクラスのdomXml()関数によって返される文字列でデフォルトの位置サイズ(ジオメトリ)を指定する必要があります。たとえば、カスタムウィジェットプラグインの例で提供されるAnalogClockPluginは、次のメソッドを使用してデフォルトのウィジェット位置サイズを指定します。
 
    ...
           "  \n"
           "   \n"
           "    0\n"
           "    0\n"
           "    100\n"
           "    100\n"
           "   \n"
           "  \n"
    ...
    domXml()関数のもう一つの特徴は、それが空の文字列を返す場合、ウィジェットがインストールされないことであるのウィジェットボックスのQt  デザイナー ただし、他の形式のコンポーネントでも使用できます。この機能はコンポーネントを非表示にするために使用され、ユーザーが明示的に作成する必要はありませんが、他のコンポーネントが作成する必要があります。
     完全なカスタムパーツフォーマットは次のようになります。
 displayname="MyWidget">
    
    
        
            widgets::MyWidget
            addPage
            
                
        
    

ラベルの属性:
属性 プレゼンテーションフォーム コンテンツ
language オプション 「c ++」、
「ジャンビ」
この属性は、カスタムウィジェットによって提供される言語を指定します。
これは主に、C ++プラグインがQtJambiに表示されないようにします。
displayname オプション クラス名 属性の値がウィジェットボックスに表示され、名前空間を削除するために使用できます。

 

    このタグは、Qt Designer とUICに、ページをコンテナコンポーネントに追加するために使用するメソッドを指示し  ます。これは、父親を介して子を追加するのではなく、子を追加するために特定のメソッドを呼び出す必要があるコンテナコンポーネントに適用されます。特に、これは関連するコンテナーであり、Qt Designer によって提供されるサブクラスコンテナーではなく  、現在のページの概念に基づいています。さらに、それらを拡張するためのコンテナーを提供する必要があります。
    要素には、属性のメタ情報のリストを含めることができます。現在、文字列型の属性がサポートされています。これらの属性には、タグを使用できます。タグには次の属性があります。
 
属性 プレゼンテーションフォーム コンテンツ
name 必要 属性の名前
type する必要がある 以下の表を参照してください この属性の値は、属性エディターがそれらを処理する方法を決定します。
notr オプション "true",
"false"
如果属性是“true”,则该值意味着不再被翻译。
字符串属性的类型属性的值:
类型
"richtext" 富文本
"multiline" 多行纯文本
"singleline" 单行纯文本
"stylesheet" 一个CSS样式表
"objectname" 对象名称(受限制的一组有效字符)
"url" URL、文件名.
插件要求
    为了让插件在所有平台上正常工作,你需要确保他们导出了Qt Designer所需要的符号。
    首先,插件类必须被Qt Designer加载的插件按顺序导出。使用 Q_PLUGIN_METADATA()宏来做到这一点。此外, QDESIGNER_WIDGET_EXPORT宏必须被使用,来定义Qt Designer将实例化的插件中每一个自定义窗口部件类。
 
创建一个良好的插件:
    一些自定义窗口部件有专门的用户界面功能,可以使他们的行为不同于Qt Designer中的其它标准窗口部件。特别是,如果一个自定义小部件由于调用QWidget::grabKeyboard()来捕获键盘,Qt Designer的操作将受到影响。
    为了让自定义部件在Qt Designer有特殊行为,提供 initialize()函数来配置窗口部件运行过程中的特定行为。该函数在被第一次调用之前先调用createWidget(),可以设定一个内部标志来测试什么时候调用createWidget()函数。
 

おすすめ

転載: blog.csdn.net/weixin_41882459/article/details/111832850