在开发过程中,我们可能会复用控件的需求,比如说一些自定义的QLabel,QPushButton控件。一次开发,到处使用。所以就有必要把这个控件独立出来,哈哈,想想还是挺有意思的,以前都是用Qt自带的控件,这次可以把自己的控件给别人使用。
1. 结果展示
注意下图的3点:
- 在Widget 窗口中里面增加了自定义窗口部件 custom_widget
- 在中间的Form窗口中添加custom_widget控件,在控件绘制了一行文字
- 在最右边的属性设计器自定义3个属性
2. 具体的步骤
-
Qt creator创建项目
好了。到这里我们准备工作就结束了。来,走一个编译下。
编译ok了,之后呢?好像有点不对劲啊,就这样?
我们还需要一个步骤,就是需要把编译出来的dll文件,拷贝到Qt的plugin目录下。我写了个bat文件去做这件事情。
下面有四点需要你注意的
-
把下面的Qt安装目录修改为你安装的目录
-
注意bat文件的放置位置,因为我是采用了相对位置复制文件
-
注意拷贝的时候文件名,你的文件名可能和我是不一样的
-
我这里为了演示只拷贝了release版的
xcopy .\build-custom_widget-Desktop_Qt_5_5_0_MSVC2013_32bit-Release\release\*.dll "C:\Qt\Qt5.5.0\5.5\msvc2013\plugins\designer\" /Y
xcopy .\build-custom_widget-Desktop_Qt_5_5_0_MSVC2013_32bit-Release\release\*.lib "C:\Qt\Qt5.5.0\5.5\msvc2013\plugins\designer\" /Y
成功如下提示
-
编译,复制到plugin的目录,启动designer看效果
好了,什么都不要说。拷贝到指定目录之后我们看下效果如何。记住Designer需要重启下,它需要重新加在dll文件的。
嘿嘿,怎么样,效果出来了吧。是不是3分钟就够了。当然如果你要工程中用的。那可是需要花时间精雕细琢的。
到这里我就已经成功大半了,回过头来我们3分钟前创建的项目。因为我们需要稍微修改下代码,完成一个自定义话的东西。
-
打开我们的项目找到如下文件
-
打开customwidget2.cpp文件,注意不是customwidget2plugin.cp
打开之后你会发现里面其实空空如也,除了声明一个class,没有什么代码。
好了,在这里就是我们大显身手的时候。我打算在这里override paintEvent函数。
在customwidget2.h头文件里面我们重新override paintEvent。
protected:
virtual void paintEvent(QPaintEvent * event);
在customwidget2.cpp头文件里面,下面的这段代码的目的就是在窗口中绘制一段蓝色文字。
void CustomWidget2::paintEvent(QPaintEvent * event)
{
QPainter painter(this);
QRect temp_rect = rect();
painter.setPen(Qt::blue);
painter.drawText(rect(), Qt::AlignCenter, "this is test custom widget");
3. 编译好之后,copy dll文件plugin目录,并把所有的designer关闭
我们重新打开designer,并新建一个窗口,看到的效果如下所示。就表明你成功了。
好了,剩下的就是你自由发挥了。
其实还有很多的内容我没有说。我们留到下一节再说吧。比如customwidget2plugin.cpp这里面又是做什么用处的。