Qtのデザイナインターフェースを備えたフォームを設計するとき、我々は、フォームコントロールでウィジェットボックスを使用することができ、そのようなので、上のテキストエディタにドラッグして、ボタンのような非常に便利なインターフェイスを、描きます。Qtのデザイナでコントロールが我々のニーズのほとんどを満たすが、時にはまた、入力ボックスなど、いくつかの特別なニーズを持っているが、我々は緯度と経度を入力する必要があり、この時間は、入力方法の2種類が存在します1は、分、秒の形式である、小数の形である、シンプルなLINEEDITを使用してのみ、この時間は、需要を満たすことができません。我々は、浮動小数点入力をサポートすることができ、それはまた性を有し、それは緯度と経度の形で入力を切り替えることができるように、このプロパティを変更し、このような制御入力を構成考えます。あなたが私たちの複数のフォーム上の緯度と経度を入力する必要がある場合には、非常に便利になりますこのような制御を構築します。ここでは例として、カスタムフォームコントロールを作成する方法について説明します。
ステップ1:カスタムコントロールプロジェクトを作成しますQtDesigner
以下に示すようにオープンのQt Creatorを、Qtのデザイナーは、カスタムコントロールを作成するには:
ウィザードでは、「テスト」という名前の新しいクラス、作成するように要求されます(注:間違っていると、後で最初の文字は大文字ではなく、すべて小文字を、または)、となっていますプロジェクトの作成を完了するために、「次のポイント」をクリックし
、以下のように、作品を作成されています:
ステップ2:編集プロジェクトコード
新しいプロジェクトでは、Testクラスは、我々は、ないUIインターフェイスファイルならば、プロジェクトはまたを通じてコンパイルすることができ、手動で追加する必要はありませUIインターフェイスファイルを行いますが、コントロールは、それが直接ハングするときに開いdesingerツールの後ctreatorに追加されます。そこで、我々は、テストクラスを再度追加、削除された元のテストクラスtest.cのとTEST.Hを置くことができます。
:次のように、テストクラスを作成し
、エラー確率を減少させるために、インターフェイスはこの時点では何もしません。
「書式#include <QtUiPlugin / QDesignerExportWidget>」プロジェクトのヘッダファイルに「TEST.H」を追加し、クラス名の前に「QDESIGNER_WIDGET_EXPORT」マクロを追加します。図は次のとおりです。
第三段階:プロジェクトをビルド
保存并选择release方式编译。先qmake一下,然后点击左下角的”构建“按钮,进行编译;最后,编译完成。此时会生成testplugin.dll和testplugin.lib两个库。
第四步:部署插件
编译完成后,在输出目录下,找到对应的testplugin.dll和testplugin.lib两个文件。分别拷贝到QT库的designer路径下和QT的IDE工具的designer路径下。
以我本地5.7.0路径为例:(具体以个人的QT安装路径为准)
QT库的designer库路径:C:\Qt\Qt5.7.1\5.7\msvc2013_64\plugins\designer
QT库的IDE路径:C:\Qt\Qt5.7.1\Tools\QtCreator\bin\plugins\designer
第五步:测试使用插件
新建一个工程,在工程使用该Test自定义插件。
1、打开*.ui,在左下角会出现我们前面编译的自定义插件,如下图:
直接拖拽到ui界面。
2、在工程所在文件目录中,新建include文件夹,将前面的插件头文件test.h放在该include文件夹中。新建lib文件夹,将前面生成的testplugin.lib静态库放在此lib文件夹中。
3、打开测试工程的*.pro文件。添加相应的include路径和lib路径。
添加以下内容:
1 LIBS += $$PWD/lib/testplugin.lib
2 INCLUDEPATH += $$PWD/include
4、切换到release编译模式,点击qmake,生成相应的makefile文件。并将前面生成的testplugin.dll动态库添加到release输出目录中。如下图:
5、点击构建,此时会生成*.exe到release输出目录。
此时。直接运行*.exe就可以使用该插件了。自定义插件的新建并使用到此算是OK了。
第六步:Qt自定义插件注意事项:
1:每个Qt库bin目录的designer可执行文件都是和该库同一个编译器编译的,可用,如果想要集成到Qt Creator中,则需要注意版本,一般在windows上的Qt Creator版本是MSVC的,则需要对应的Qt库也是MSVC编译的,库版本和编译器版本必须保持一致才能是顺利集成到Qt Creator的重要前提。
2:自定义控件的名称不能小写,否则拖过去的控件自动生成的默认名称和类名一样,会编译通不过。这个问题坑了我很久,造成自动生成的UI代码保存,一直没有怀疑,后面才发现自动生成的代码类名和实例名称一样,冲突导致的。
3:自定义控件类头文件引入,Qt5.7以下版本为#include <QtDesigner/QDesignerExportWidget> 以上版本为#include <QtUiPlugin/QDesignerExportWidget>
4:类名前必须加入 QDESIGNER_WIDGET_EXPORT 宏。否则集成到Qt Creator 中编译会报错。不加的话可以在设计器中加载,但是编译会报错。
5:如果将生成好的dll文件放到Qt库目录下的 plugins\designer 下,可以在 designer 中看到。放到Qt Creator下的 bin\plugins\designer 则可以集成到Qt Creator中。
6:将自定义控件的头文件、dll文件、lib(mingw编译器为.a)文件复制出来,放到include(可自己随便命名,我这里习惯用include)目录,将include目录放到项目的源码文件下,在使用了自定义控件的项目的pro文件中,增加两行 INCLUDEPATH += PWD / *** /含まれています。コピーlibに(.A用mingwのコンパイラ)、あなたは正しくコンパイルが完了した後に実行してコンパイルすることはできませんが、ので、あなたが同じディレクトリに実行可能ファイルに対応するカスタムコントロールのdllファイルが必要、今では行われています。
特別なエピソードの言葉:記事のほとんどは、対応するQtのインストールディレクトリのフォルダに対応したライブラリとヘッダファイルに導入され、なぜ一緒にプロジェクトとして、ディレクトリを含めるためにここに置きますか?個人がとても理解しやすい、一緒に、それぞれを簡単に実行可能ファイルと同じディレクトリにプロジェクトのランタイムファイルをコピーすることができますが、実行時からの対応を見つけるために、Qtライブラリカタログを忘れないでください。そして、リリースコードも良いの参照を持つことができるとき。
7:あなたはQtの創造主で対応するmingwのQtライブラリに統合されたカスタムコントロールが必要な場合は、公式ウェブサイトののQt Creatorをバージョンは、基本的にMSVCのバージョンを提供し、QtライブラリはQtの創造主をコンパイルするには、対応するソースコードを自分のを必要としています。