Qt自定义窗口部件

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

【原创】Qt自定义窗口部件

QtDesigner自定义窗口部件有两种方法:改进法(promotion)和插件法(plugin)改进法

1、改进法之前,要先写好子类化QSpinBox后的HexspinBox.h和HexspinBox.cpp文件。把这两个文件拷贝到想要的项目中。

HexspinBox.h

HexspinBox.cpp

2、在需要开发的项目中的窗口中,

1、用Qt Designer创建一个新的窗体main.ui,把控件箱里的QSpinBox添加到窗体中。

2、右击微调框,选择“Promote to ”上下文菜单。

3、在弹出的对话框中,类名处填写“HexSpinBox”,头文件填写“hexspinbox.h”

好了。在ui生成的包含有QSpinBox的控件文件中,ui的源代码里面多了一段

HSpinBox

QSpinBox

hspinbox.h

包含文件变为"hexspinbox.h"。在Qt Designer中,QSpinBox表示的控件为HexSpinBox,并且可以设置所有的QSpinBox的属性。

可以在VS2008中编译一下main.ui文件,从ui_main.h源代码中可以知道,引入的控件是:

升级法的缺点是不能在Qt Designer中设置自定义控件自己的特有属性,也不能够绘制自己。这些问题可以用插件法解决。

插件法

1.VS中创建Qt4 Design Plugin 工程,名称叫custom

自动建立如下几个文件:

自定义控件:custom.h,custom.cpp

插件:customplugin.h,customplugin.cpp

源代码如下:

custom.h

custom.cpp

customplugin.h

customplugin.cpp

在其cpp的最后必须添加下面的宏:

.........10........20........30........40........50........60........70........80........90........100. (1)

10.......120.......130.......140. (150)

2. 新建后,直接编译,会产生如下错误

1>LINK : fatal error LNK1181: cannot open input file 'QtDesignerd.lib'

这是因为此工程默认引用的是QtDesignerd.lib库,更改其为版本对应的库即可消除故障(VS2008是在项目的属性中Linker/input/Additional Dependencies中修改,我这里Debug配置使用的是QtDesignerd4.lib,Release 版本使用QtDesigner4.lib)。

3、使用自定义插件

1)、只需要把通过Release模式生成的项目.lib和项目.dll文件拷到

C:\Qt\4.7.4\plugins\designer中,

2)、然后在QtDesigner中,选择菜单Help/About Plugin就可以看到你的自定义控件是否已经载入成功。

在QtDesigner中控件列表中有一项My Widget 中就有你的自定义控件。

参考:

1、 Qt自定义控件(插件)并添加到QtDesigher

打开QtDesigner,我们自定义的空间custom成功使用界面如下:

之前使用Qt的时候都是手写代码的(因为批量按钮可以使用数组实现),但当界面越来越复杂时,这种开发效率就太低了;

后来就开始使用QtDesigner,但要使QtDesigner支持我自己写的控件,需要提升或插件的形式(在中有介绍).

结果看了之后,觉得提升的方式简单而不灵活,故使用插件法实现;步骤如下:

[具体可参照第三方开源组件Qwt部件库的插件类的实现方式,个人感觉特别规范]

1. 继承QObject和QDesignerCustomWidgetInterface实现插件类(或继承QObject和QDesignerCustomWidgetCollectionInterface实现多个自定义控件);

2. 编写Qt平台无关的工程文件.pro(例如CustomWidgetPlugin.pro);

3. qmake CustomWidgetPlugin.pro;

4. make(windows下vc平台使用nmake,如果发现缺少环境变量,可以运行其bin/vcvars32.bat配置环境)

先说说第一点:

继承后需要重写父类虚函数,原型如下:

[cpp]view plaincopy

在其cpp的最后必须添加下面的宏:

[cpp]view plaincopy

再说说第二点:

.pro的参数和语法比较多, 在网上可以搜到不少资料, 在这里总结一下

1. 注释

从“#”开始,到这一行结束。

2. 指定源文件

SOURCES = *.cpp

对于多源文件,可用空格分开,如:SOURCES = 1.cpp 2.cpp3.cpp

或者每一个文件可以被列在一个分开的行里面,通过反斜线另起一行,就像这样:

SOURCES = hello.cpp /(续行符)

main.cpp

一个更冗长的方法是单独地列出每一个文件,就像这样:

SOURCES+= hello.cpp

SOURCES +=main.cpp

这种方法中使用“+=”比“=”更安全,因为它只是向已有的列表中添加新的文件,而不是替换整个列表。

3. 指定头文件

HEADERS = hello.h或者HEADERS += hello.h

列出源文件的任何一个方法对头文件也都适用。

4. 配置信息

CONFIG用来告诉qmake关于应用程序的配置信息。

CONFIG+= qt warn_on release

编译QtDesigner插件中使用CONFIG += desginer plugin release

在这里使用“+=”,是因为我们添加我们的配置选项到任何一个已经存在中。这样做比使用“=”那样替换已经指定的所有选项是更安全的。

A> qt部分告诉qmake这个应用程序是使用Qt来连编的。这也就是说qmake在连接和为编译添加所需的包含路径的时候会考虑到Qt库的。

相关文档
最新文档