• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

使用qt编写界面程序时,可以很容易地将控件拖动到窗口中。系统提供了一些常用的控件,那么如何将自己定义的控件添加到其中,直接拖动呢?网上搜了一堆教程,我根据网上的教程踩了很多洞。本文记录了如何开发自定义控件并将其添加到QT中,QT支持直接拖动和使用。

首先,我的开发环境

64位Win10、64位qt5.14.2、vs2017

k4pf413wjs44375.png

da24g0alktz4376.png

二、发展过程

1.Qt creator-新建-其他项目-qt4设计器的自定义控件-项目名称(以Test为例)。接下来——选择桌面qt 5.14.2 msvc2017 32bit和64 bit——控件类,添加控件类(以TestWidget为例),右边的对话框会根据需要自行调整(描述中有一组,可以控制我们的自定义控件在

2.在TestWidget类中引入头文件# includeQtuiPlugin/qdesignerexportwidget,在类名前添加QDESIGNER_WIDGET_EXPORT。

3.写类。

testwidget.h

1 #杂注一次

2

3 #包含QWidget

4 #包含QtUiPlugin/QDesignerExportWidget

6类QDESIGNER _ WIDGET _ EXPORT test WIDGET : public q WIDGET

7 {

8问_对象

9 _ property(q color crbg write set color)//添加这句话,可以直接在designer中设置控件属性。

10 public:

11 void set color(QColor Cr);

12 test widget(q widget * parent=0);

13 void paint event(QPaintEvent * event);

14 QColor crBg

15 };

testwidget.cpp

1 #包含“testwidget.h”

2 #包括QPainter

3 void testwidget :3360 set color(QColor Cr)

4 {

5 crBg=cr

6更新();

7 }

9 testwidget : test widget(q widget * parent):

10 QWidget(父)

11 {

12 crBg=QColor(255,0,0);

13 }

14

15 void testwidget : paint event(qpaint event * event)

16 {

17 Q _未使用(事件);

18 QPainter油漆(本);

19 paint.fillRect(rect(),crBg);

20 }

简单画个背景。

三。过程

1.选择32位调试编译,然后将生成的testwidgetplugind.dll复制到d : \ Qt \ 5 . 14 . 2 \ msvc 2017 \ plugins \ designer,在控件中启动d : \ Qt \ 5 . 14 . 2 \ msvc 2017 \ bin \ designer.exe。有什么问题?点击帮助-关于插件,如下图所示:

w3cqbtoxras4377.png

从图中可以看出,原因是使用了调试版本。

2.改成32位发布编译,然后把生成的testwidgetplugin.dll复制到d : \ Qt \ 5 . 14 . 2 \ msvc 2017 \ plugins \ designer,启动d : \ Qt \ 5 . 14 . 2 \ msvc 2017 \ bin \ designer.exe,就出来了。创建一个新的窗体,拖动它,并调整属性。

3kdro03sop14378.png

4rzzqmmoszx4379.png

什么?可以根据设置显示颜色,但是右边设置的属性值显示为0,0,0,255。想一想,是因为上面的属性只设置了写吗?如果加上READ就好了(当然是了)。

3.以上两种操作都可以在32位designer.exe下使用。d : \ Qt \ 5 . 14 . 2 \ msvc 2017 _ 64 \ bin \ designer.exe可以用吗?不会,即使将上述版本下生成的testwidgetplugin.dll复制到d : \ Qt \ 5 . 14 . 2 \ msvc 2017 _ 64 \ plugins \ designer也不行。机制的人类会想到用64位编译吗?答案是肯定的。

4.经过上述操作后,在designer.exe可以正常使用,但在qt creator中不能使用。我该怎么办?我们还需要复制d : \ Qt \ tools \ Qt creator \ bin \ plugins \ designer下的dll文件。问题是,你要复制32位还是64位?64位,因为我环境的qtcreator是64位,如上图所示。现在可以用了。

第四,坑

有篇文章说如果qtcreator是用msvc2019编译的,那么插件也应该是用msvc 2019编译的,差点导致我重装VS,只要记得用velease,用对应的32或者64编译,然后复制到对应的位置就可以了。

Link to comment
Share on other sites