Qt自定义控件(插件法)

Qt自定义控件(插件法)

达到的效果就是:可以在creator的UI界面直接拖拽来使用。

       在网上可以看到很多类似的博文介绍自定义控件方法,当然《QT C++ GUI 第二版》书中也有介绍应。我并不是按照这些方法来做的,内部知识是相通的。我用的是Qt5.1版本操作步骤如下:

首先说一下用的是VS编译器,所以下面看到的都是基于VS版本的Qt5.1

       在网上了解到MingW版本带的designer是用VS编译器编译的,如果用MingW版本的Qt的话,因为编译器版本的不一致导致无法显示自定义控件。不过将VS编译的自定义控件dll库文件拷贝到Mingw版本的相同目录是可以使用的。具体路径在第六步列出。

 

第一步:creator中新建-->其他项目--->Qt4设计师自定义控件。如图:

第二步:位置设置。

 

第三部:构建套件,这步可以把Debug模式去掉因为不会用到,最终需要的必须是release版本的才行。如图:

 

第四步:创建自定义控件类名、选择Logo....

这里要说一下:选择“包含项目”是把要实现自定义控件的类.h文件和.cpp文件包含进来供实现自定义控件等功能;如果选择“链接库”是已经有自定义控件的实现代码并把它封装成库的形式了(个人理解),因为选择链接库在pro文件中有LIBS+= -L -l* 如果没有*库文件的话是编译不过去的。所以选择默认的“包含项目”形式。下面选择“说明”选项卡如图:

这步做的就是Qt书上写的那些要重写的函数,所在组、以及鼠标放上去的提示等,选择“控件是个容器”的意思是表明本控件允许其他控件放上去,像widget等那样。

 

第五步:构建自定义控件从而生成dll库文件

 

第六步:在release目录下找到dll文件将其拷贝到“D:\Qt\Qt5.1.0\Tools\QtCreator\bin\plugins\designer ”。重新启动creator就可以在ui界面看到自定义控件了。如图:

在此记录下来防止以后忘记,看到的朋友有好的办法欢迎分享。

### 创建和使用 Qt 自定义控件插件 #### 插件开发概述 Qt 提供了一种机制来扩展其功能,允许开发者通过插件的形式集成自定义组件到应用程序中。这种机制特别适用于设计工具(如 Qt Designer),以便能够轻松地将新的控件拖放到 UI 文件中。 --- #### 步骤说明 #### 定义自定义控件类 为了创建一个可用的自定义控件插件,首先需要实现该控件的核心逻辑。通常情况下,这涉及继承 `QWidget` 并重写必要的函数。例如: ```cpp #ifndef LOGLATEDIT_H #define LOGLATEDIT_H #include <QWidget> class LogLatEdit : public QWidget { Q_OBJECT public: explicit LogLatEdit(QWidget *parent = nullptr); }; #endif // LOGLATEDIT_H ``` 上述代码展示了一个简单的自定义控件声明[^1]。此部分主要负责提供基础的功能接口以及初始化方。 --- #### 实现插件接口 为了让 Qt 能够识别这个新控件作为可加载项的一部分,还需要编写对应的插件类。此类需派生自 `QDesignerCustomWidgetInterface` 或其他相关基类,并注册至系统中。下面是一个典型的例子: ```cpp #include <QtUiPlugin/QDesignerExportWidget> #include "loglatedit.h" class LogLatEditPlugin : public QObject, public QDesignerCustomWidgetInterface { Q_OBJECT Q_INTERFACES(QDesignerCustomWidgetInterface) public: bool isContainer() const override; QString domXml() const override; QString group() const override; QIcon icon() const override; QString includeFile() const override; bool isInitialized() const override; QString name() const override; QString toolTip() const override; QString whatsThis() const override; QWidget* createWidget(QWidget* parent) override; private: bool initialized = false; }; ``` 这里的关键在于覆写的成员函数提供了有关如何显示、分类及实例化控件的信息[^2]。 --- #### 配置项目文件 (.pro) 要使编译器知道哪些库被依赖以及路径设置情况,在 `.pro` 文件里加入特定配置至关重要。比如这样一段内容可以指定设计师插件的位置及相关链接参数: ``` DESIGNER_PATH = C:/Qt/Qt5.14.2/5.14.2/mingw73_64/plugins/designer LIBS += -L$$DESIGNER_PATH -llibtestplugin INCLUDEPATH += $$DESIGNER_PATH ``` 这些指令帮助构建环境找到所需的头文件和支持动态链接库。 --- #### 构建与部署 完成编码之后,执行标准流程进行编译连接操作即可获得最终产物 —— 动态共享对象(DLL/SO),将其放置于适当位置后就能让 Qt Creator 或者独立运行的应用程序发现它并加以利用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值