【Qt4 设计师自定义控件】项目创建➕使用

前言

为了更加优雅地使用我们自己设计出来的控件,Qt提供了这一模板,它可以帮助我们把自己设计的控件也集成到Qt Designer中,这样就可以像Qt自带的控件一样直接使用了。

创建流程

创建项目 → 其他项目 → Qt4 设计师自定义控件

在这里插入图片描述

项目名称 → 创建路径 → 下一步

在这里插入图片描述

选择MSVC的Release套件 → 下一步 (没有MSVC可以看这篇教程下载)

在这里插入图片描述

给新类起个名字 → 勾选代码框架 → 在说明中设置分组,提示信息等(可选) → 下一步

在这里插入图片描述
后面一直下一步就ok了。

上面的【说明】中的【分组】体现在这里:
在这里插入图片描述
这些就是组名,到时候你的控件就会在你定义的组名下面

项目创建完成后长这样:
在这里插入图片描述

这里多了一个pri层,它的结构和我们平时选择的Qt Widgets Application模板十分类似,只不过他是用来生成插件的,所以不会有exe文件产生,也就没有main函数。因此你只能build,不能run
我们在设计的时候,可以忽略pri外面的文件,那些*plugin.h*plugin.cpp是插件的配置文件,你一般不需要动它。

预览效果

前面提到这个模板不能生成exe文件,那我们需要怎么预览我们设计的控件?
有两种方式:

方式适用范围
使用designer.exe只需要预览样式和动画
新建Qt Widgets Application项目涉及复杂测试,如测试信号槽、web请求等

为了顺利预览,这里有一张对应的表格,你需要匹配它们

designer
Qt Creator自带的由MSVC+Release构建
mingw包下的由MinGW+Release构建
msvc包下的由MSVC+Release构建

在这里插入图片描述

  • 如果你使用Qt Creatordesigner.exe(这个exe你是找不到的),你需要找到.\Qt\Qt6.5.3\Tools\QtCreator\bin\plugins\designer这个目录,里面是存放.dll的地方,你的插件编译后会生成dll文件(注意得用MSVC+Release编译生成的.dll),把它拷贝到这个地方,重启你的 Qt Creator 你就可以看见插件了(如果你遇到了问题,别急,先往下看)。

  • 如果你使用mingw包下的designer.exe,你需要找.\Qt\Qt6.5.3\6.5.3\mingw_64\plugins\designer,接下来的操作一样,把.dll文件copy过去就ok了。(注意得使用MinGW+Release编译生成的.dll

  • 如果你使用msvc包下的designer.exe,你需要找到.\Qt\Qt6.5.3\6.5.3\msvc2019_64\plugins\designer,接下来的操作一样,把.dll文件copy过去就ok了。(注意得使用MSVC+Release编译生成的.dll

使用

这是我们的终极目标,这一步完成了才算完成。

使用的时候,我们肯定需要用到【预览效果】中的 新建Qt Widgets Application项目 方式。所以你现在把由MSVC+Release编译的.dll拷贝到designer文件夹中了吗?重启了吗?

我们现在打开设计页面,应该就可以看到我们的插件了。

现在你还不能直接跑,还需要引入我们的外部库(.lib/.a

  1. 添加库

在这里插入图片描述

  1. 选择外部库
    在这里插入图片描述

  2. 导入lib
    在这里插入图片描述

  3. 点击完成

之后你会在.pro文件中看到它帮你生成了下面这一坨东西

win32: LIBS += -L$$PWD/../../Button/switch/CtmSwitchButton/build/Desktop_Qt_6_5_3_MSVC2019_64bit-Debug/debug/ -lctmswitchbuttonplugind

INCLUDEPATH += $$PWD/../../Button/switch/CtmSwitchButton
DEPENDPATH += $$PWD/../../Button/switch/CtmSwitchButton

上面的版本是MSVC+Debug版本的.lib,所以你的项目必须使用MSVC+Debug才能跑。
那如果要切换其他的kits怎么办?那就导入对应的一来就ok了。
【注意】不可以同时导入不同的.lib/.a


纠正一下,最好还是不要使用下面这种分支写法,太容易出错了,而且每次换一下kit就得重新编译,所以大家还是弃用下面的写法吧 。看最下面的


2025-05-09

那有人要问了,我每次都要切来切去太麻烦了。
没关系,我已经为备好了:

win32 {
    BasePath = $$PWD/../../Button/switch/CtmSwitchButton/build
    MSVCKit = Desktop_Qt_6_5_3_MSVC2019_64bit
    MinGWKit = Desktop_Qt_6_5_3_MinGW_64_bit
    
    contains(QMAKE_COMPILER, msvc) {
        # MSVC编译器
        isDebugBuild: LIBS += -L$${BasePath}/$${MSVCKit}-Debug/debug/ -lctmswitchbuttonplugind
        else:         LIBS += -L$${BasePath}/$${MSVCKit}-Release/release/ -lctmswitchbuttonplugin
    }
    else {
        # 其他编译器,默认是MinGW
        isDebugBuild: LIBS += -L$${BasePath}/$${MinGWKit}-Debug/debug/ -lctmswitchbuttonplugin
        else:         LIBS += -L$${BasePath}/$${MinGWKit}-Release/release/ -lctmswitchbuttonplugin    
    }
}

上面代码可以根据你的kits,切换四种版本(前提是你在写插件的时候都编译过哦,所以我一开始就让你们选了四种kits)
你可以先导入一遍,然后把名字改成你自己的就好了。

  • MinGW + Release
  • MinGW + Debug
  • MSVC + Release
  • MSVC + Debug

【注意】这里的版本是为.lib/.a服务的,不要和.dll只能使用MSVC+Release搞混了。
.dll只能使用MSVC+Release是因为Qt Creator自带的designer.exe就是用MSVC+Release构建的,别记乱了。

这几个版本可以满足我们绝大部分的需求。下面是一些语法介绍,可以了解一下,下次你甚至可以自己写出来,不需要靠ui界面去导入外部库。

语法/指令用法类别含义与作用示例说明
-L链接参数指定库文件所在目录(Library Path)LIBS += -L$$PWD/libs编译器会在该目录下查找 .lib.a 等库文件
-l链接参数指定要链接的库名,自动补全前缀 lib 和后缀 .lib(MSVC)或 .a(MinGW)LIBS += -lMyLib实际链接的是 libMyLib.aMyLib.lib,根据编译器自动适配
$$varQt变量引用引用 Qt 内建或用户定义的变量INCLUDEPATH += $$PWD/include$$PWD 表示当前 .pro 文件目录
$${var}Qt变量延迟展开防止提前展开变量(不常用,特殊场景)LIBS += -L$${MY_PATH}/lib一般写 $$var 就够用了,只有嵌套或特殊变量拼接时需要 $${}
contains()条件判断判断某变量是否包含某个值contains(QMAKE_COMPILER, msvc)常用于判断当前 Kit 的类型
isDebugBuild内置变量判断当前是否为 Debug 构建isDebugBuild: ... else: ...替代手动写 CONFIG(debug, debug)

不如直接一股脑全加上得了,然后如果哪个文件不存在,你就把哪个给注释掉好了

win32 {
    BasePath = $$PWD/../../Button/switch/CtmSwitchButton/build
    MSVCKit = Desktop_Qt_6_5_3_MSVC2019_64bit
    MinGWKit = Desktop_Qt_6_5_3_MinGW_64_bit
    
	LIBS += -L$${BasePath}/$${MSVCKit}-Debug/debug/ -lctmswitchbuttonplugind
    LIBS += -L$${BasePath}/$${MSVCKit}-Release/release/ -lctmswitchbuttonplugin
	LIBS += -L$${BasePath}/$${MinGWKit}-Debug/debug/ -lctmswitchbuttonplugin
   	LIBS += -L$${BasePath}/$${MinGWKit}-Release/release/ -lctmswitchbuttonplugin    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

phshp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值