您的位置:首页 > 编程语言 > Qt开发

自定义QT控件(插件)流程

2015-03-30 10:01 330 查看
标题:自定义QT控件(插件)流程

作者:kagula

时间:2015-03-30

环境:

[1]VS2010SP1

[2]QT5.41,安装路径为“C:\Qt\5.4\msvc2010_opengl”

[3]Qt5 Addins 1.24(for Visual Studio Plugin)

关键词:

    QT Widget

内容概要:

    介绍开发QT插件(自定义QT Widget)DLL文件的流程。

正文

第一步:新建项目"kagulaQt541Plugin"项目

[Qt5 Projects]->[Qt5 Designer Plugin],向导为我们新建了两个class。

class“KagulaQT541Plugin”,继承了QObject和QDesignerCustomWidgetInterface两个class。

只能有一个这样的类,这个类告诉QT Designer如何加载这个控件。

class“KagulaQT541”,继子 QWidget,是我们要编写的自定义Widget。

第二步:

参考资料[1]我们编写自己的第一个自定义Widget。

修改kagula541.h文件,添加下面的头文件
#include <QtDesigner/QDesignerExportWidget>

在这个头文件里,在“class”关键词后面"QDESIGNER_WIDGET_EXPORT"宏,这里你的项目才能导出这个class,

而QT App(调用者)才能通过这个宏调用“Plugin DLL”这个class的实现。

第三步:引用自定义插件

新建调用者项目,在调用者项目中,

[3-1]添加,头文件搜索路径。

[3-2]添加,库文件搜索路径,Debug对应Debug,Release对应Release。

第四步:部署与运行

    QT插件项目以Release方式编译,在“D:\workspace\KagulaQT541Plugin\Win32\Release”目录下生成“KagulaQT541Plugin.dll”

把这个文件复制到“C:\Qt\5.4\msvc2010_opengl\plugins\designer”目录,启动“QT designer”[帮助]->[关于插件]可以看到插件已经正常加载。

如果复制“Debug”版本插件DLL,QT designer装载你的插件DLL会失败! 

    更方便的方法是,打开插件project

    右键单击项目名称,调出properties对话框(要在Release模式下面)

    [Configuration Properties]->[BuildEvents]->[Post Build Event]修改

    [Command Line]属性

echo on

copy  "$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName).dll"  "C:\Qt\5.4\msvc2010_opengl\plugins\designer"

echo off

    [Description]属性

Copy plugin dll to Qt5 plugin directory...

备注:

  [a]自定义Widget一般需要添加属性,如何使用属性参考资料[2]。

  [b]修改插件位置,参考资料[3]。

  [c]调用者要进入插件的断点,需要满足两个条件[c1]插件的project同调用者在同一个solution里[c2]插件源码路径同调用者源码路径在同一级solution路径下。

参考资料

[1]《Custom Widget Plugin Example》
http://doc.qt.io/qt-5/qtdesigner-customwidgetplugin-example.html
[2]《Integrating a Custom Widget into Qt Designer》

如何为自定义widget添加属性示例
http://www.ics.com/blog/integrating-custom-widget-qt-designer
[3]《Qt loads plugins of release version on a debug build - Mac only》
https://forum.qt.io/topic/1268/qt-loads-plugins-of-release-version-on-a-debug-build-mac-only
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: