qlistwidget添加自定义控件_Qt自定义插件开发

Qt Designer 自带的控件虽然能够在很大程度上满足我们日常的开发,但是当遇到一些比较特殊需求时,往往显得力不从心。所以自定义插件的开发,并将其导入Qt的设计师中,这样可以像基本控件一样拖拽到UI界面中,同时也可以自定义一些属于插件的独有属性,直接在UI界面中配置,十分方便快捷。

创建工程

2229f7bcbc4efe3b7640b566d61d5b01.png

接下来, 我以TimelinePlugin为例,填写创建过程中的一些基本信息

dd698343dcb04855fd190b0de709cb3a.png

源文件信息中填写一些控件类的名称

9ba69aac891ab571469800581cdef111.png

这一部分填写的是对插件的描述, 比如所属于那个分组( Qt 设计师软件中显示插件分组如下图,这里的组写的是 Customise), 其实就是左侧控件归属于那个标签组, 工具提示这是什么 其实就是 toolTip()whatsThis()

914360338bd438cb1766a3869661b506.png

2f54fd8f221877a4b35614ff83a573f6.png

这里面其实是当插件被拖拽到UI界面中时,需要引用的xml文件内容,这一部分不用动,都是默认生成的

下一步中还有一个设置插件名称的部分, 填写好之后, 创建工程的部分就结束了。

部署

f7d6b2f847131ffa59b8702a4294f4f4.png

这里建议 Build 环节中, Release版本中添加额外的构建步骤, 如图所示, Make 参数install, 这样在编译过程中, 会将编译出的插件库复制到 Qt Designer 的插件目录下。

而添加这一步会生效的原因是在 pro 文件中添加了这2行代码,声明需要复制的地址,和执行的条件, 这2行代码一般在创建工程时候默认生成

target.path = $$[QT_INSTALL_PLUGINS]/designer
INSTALLS    += target

于此同时还需要加一步特别重要的步骤, 添加导出符号

QDESIGNER_WIDGET_EXPORT 宏必须被使用,或自己编译动态库导出文件。这里我建议使用Qt自带的QDESIGNER_WIDGET_EXPORT宏。不加的话可以在设计器中加载,但是在使用这个类的时候编译会报错。

用法如下:

e57b0eac06d9e39a4d17f769493842b8.png

部署和一些导出的环节基本就结束了, 接下来简单尝试一些是否能够正常使用

使用

我简单在插件中添加一个 Label, 并给 Label 上显示为 TimelinePlugin, 同时创建一个 ShowPlugin 的工程, 里面就是只有一个空的mainwidow的文件, 在 Qt Designer 中将插件拖拽到 mainwidow.ui

92b7c4d054bdac01c9a3af2757bde084.png

5b061fb8c93abeca24803b808ea0a289.png

此外 ShowPlugin.pro 文件中需要配置插件的头文件位置, 以及链接插件库, 将编译好的 Timelineplugin.dll 提前移动到链接库的地址中, 如下图

1eeae28574287ef2e71ca8ec1d5946ea.png

043bc72982662bf4655173c5b03fac9f.png

使用的环节基本就这些,最后编译 ShowPlugin 工程,可以得到的结果图如下:

b32a714eeee292e32cc66c45c4d2a583.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于qlistwidget添加自定义item并且释放内存的问题,可以分为两个部分来回答。 第一部分,如何添加自定义item。在使用qlistwidget时,我们可以通过继承QListWidgetItem类来实现自定义item。具体步骤如下: 1. 创建一个QListWidgetItem类的子类,例如CustomItem。 2. 在CustomItem类中添加新的成员变量和成员函数,用于自定义item的属性和操作。 3. 在CustomItem类中重载paint()函数,实现item的绘制。也可以使用QPainter对象绘制。 4. 在主程序中使用QListWidget的addItem()函数添加CustomItem对象到列表中。 代码示例: ``` class CustomItem : public QListWidgetItem { public: CustomItem(const QString &text, QWidget *parent = nullptr) : QListWidgetItem(text, parent) {} QString customText() const { return m_customText; } void setCustomText(const QString &text) { m_customText = text; } protected: void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override { // 绘制自定义item painter->drawText(option.rect, m_customText); } private: QString m_customText; }; // 添加自定义item CustomItem *item = new CustomItem("Custom Item", listWidget); item->setCustomText("This is a custom item"); listWidget->addItem(item); ``` 第二部分,如何释放内存。在使用qlistwidget时,我们需要手动管理item对象的内存,以避免内存泄漏。具体步骤如下: 1. 在移除item之前,先调用listwidget的takeItem()函数将item从列表中移除。 2. 显式调用delete操作符释放item对象的内存。 代码示例: ``` // 删除item CustomItem *item = static_cast<CustomItem *>(listWidget->takeItem(0)); delete item; ``` 希望这样能够帮助你解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值