Qt开源控件库(qt-material-widgets)的编译及使用

项目简介

qt-material-widgets是一个基于 Qt 小部件的 Material Design 规范实现。

项目地址

项目地址:qt-material-widgets

本地构建环境

Win11 家庭中文版

VS2019

Qt5.15.2 (MSVC2019)

本地构建流程

克隆后的目录结构如图:
1

直接使用Qt Creator打开.pro(因为我要用在VS项目中,因此这里Kit选择MSVC2019):
2

直接跑release版本:
3

报错: libcomponents.a does not exists.
4

这是因为.a是Linux的库文件格式,在Windows平台上对应的.lib文件格式,生成的库文件名称也有稍许区别。
5

这里打开examples.pro,将libcomponents.a 改成components .lib,重新编译即可:
6

可以看到示例程序如下:
7
8

实际应用

如何在自己的项目中,使用qt-material-widgets控件库?

通过上面编译可以知道,控件库主要来源于components这个静态库项目,参考examples项目使用控件库的方式:

①添加.h头文件

②添加.lib库文件

头文件

打开components项目目录:
9

将.h文件单独复制出来(注意只需复制.h即可,无需复制_p.h)。

这个库使用pimpl模式实现,可以隐藏实现细节(所有私有的非虚成员),且可减少代码依赖和编译时间,具体介绍可见:

这里单独新建了一个目录(后续直接将该目录拷贝到自己项目的3方库路径下即可):
10
11

include里面的目录结构尽量和components里面的保持一致:
12

lib目录中拷贝components项目生成的components.lib:
13

直接将该目录拷贝到自己项目(这里以我的HelloQt5_15_2项目为例)的3方库路径下:
14

个人习惯用VS2019 + Qt VS Tools开发,在VS2019中打开我的HelloQt5_15_2项目:

配置附件包含目录:
15

配置库目录:
16

添加静态库文件:
17

在控件中使用控件库控件(这里以使用autocomplete为例):

因为上面添加了头文件附件包含目录,这这里直接包含autocomplete控件头文件即可使用:

#include "mainwidget.h"
#include "ui_mainwidget.h"#include "qtmaterialautocomplete.h"MainWidget::MainWidget(QWidget *parent): QWidget(parent), ui(new Ui::MainWidget)
{ui->setupUi(this);QtMaterialAutoComplete*  pAutocomplete = new QtMaterialAutoComplete(this);pAutocomplete->move(100, 100);QStringList states ={ "Alabama", "Alaska", "American Samoa", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "District of Columbia", "Florida", "Georgia", "Guam", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Northern Marianas Islands", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Puerto Rico", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Virgin Islands", "Washington", "West Virginia", "Wisconsin", "Wyoming"};pAutocomplete->setDataSource(states);
}MainWidget::~MainWidget()
{delete ui;
}

18

编译运行验证:
19

注意事项

①在Windows上编译,需手动修改下examples.pro中对静态库文件的引用

②手动拷贝头文件时只需拷贝.h即可(无需拷_p.h),同时目录结构尽量哈components项目目录保持一致。

③编译控件库的版本,应和实际使用控件库的项目的编译器版本对应。如:VS2019(MSVC2019)编译的components.lib,无法放在VS2015 (MSVC2015)中使用,因为库文件和项目的版本不一致。

总结

综上,本文通过简单示例,详细介绍了自己克隆并编译开源控件库,然后应用在自己的项目中的完整流程及注意事项。

通过该开源控件库项目,可学到动态库项目的编译和使用以及pimpl设计模式在项目中的实际应用,相信对实际工作会有一定的帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32213.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏引擎学习第147天

仓库:https://gitee.com/mrxiao_com/2d_game_3 上一集回顾 具体来说,我们通过隐式计算来解决问题,而不是像数字微分分析器那样逐步增加数据。我们已经涵盖了这个部分,并计划继续处理音量问题。不过,实际上我们现在不需要继续处理…

uni-app打包成H5使用相对路径

网上找了一圈,没用,各种试,终于给试出来了,主要是网络上的没有第二步,只有第一步,导致打包之后请求的路径没有带上域名 运行的基础路径设置为./ config.js文件里面的baseUrl路径改成空字符,千万…

知识社区:打破传统知识传播的壁垒

知识社区的诞生 当今,知识库的上传与下载已无法满足现代用户对知识获取的多样化需求。随着信息量的爆炸式增长和用户需求的日益复杂化,传统的、静态的知识库显得力不从心。用户渴望能够实时互动、即时反馈、多维度探索知识的平台。正是在这样的背景下&am…

洛谷 P5534 【XR-3】等差数列 python

这题不用向下取整//就会错,不太能理解为什么...感觉对结果好像没什么影响啊 a1, a2, n map(int,input().split()) d a2 - a1 an a1 d * (n-1) s (a1an)*n//2 print(s)

机器人路径规划、轨迹优化系列课程

机器人路径规划、轨迹优化课程-第一讲-轨迹规划导论_哔哩哔哩_bilibili 机器人路径规划、轨迹优化课程-第二讲-Dijkstra算法原理讲解_哔哩哔哩_bilibili 机器人路径规划、轨迹优化课程-第四讲-A*算法原理和代码讲解_哔哩哔哩_bilibili 机器人路径规划、轨迹优化课程-第五讲-…

qemu-kvm源码解析-内存虚拟化

内存虚拟化介绍 宿主机上的程序地址转换时为 HVA(宿主机虚拟地址)--MMU-->HPA(宿主机物理地址) 而宿主机上的虚拟机面临两层转化需求: GVP(虚拟机虚拟地址)--MMU-->GPA(虚拟机物理地址) GPA(虚拟机物理地址)--VMM-->HPA(宿主机物理地址) 虚…

WireShark自动抓包

背景 异常流量检测是当前保护网络空间安全的重要检测方法。 对流量的研究,首先需要在系统中进行抓包,并对包进行分析。 这里对WireShark自动抓包进行简要介绍。 操作步骤 1、选择“捕获”>“选项”。 2、在Input下,选择要抓包的网络接…

【CSS3】练气篇

目录 CSS 基本概念CSS 的定义CSS 的作用CSS 语法 CSS 引入方式内部样式表外部样式表行内样式表 选择器基础选择器标签选择器类选择器id 选择器通配符选择器 画盒子文字控制属性字体大小字体粗细字体倾斜行高字体族font 复合属性文本缩进文本对齐文本修饰线文字颜色 CSS 基本概念…

Trae AI IDEA安装与使用

文章目录 背景第一步、下载安装第二步、登录与使用优势异常处理 背景 最近比较热的 Trae 开发工具,在本地下载使用,记录下来。 第一步、下载安装 下载地址:【Trae中文版下载地址】,下载的安装文件名为:【Trae CN-Se…

【Godot4.4】写入和读取ZIP文件

概述 Godot提供了ZIPPacker类型来读写ZIP压缩包文件。本文是简单的写入和读取文件操作测试笔记。 写入纯文本文件 extends Buttonfunc _ready():write_zip_file("1.zip",func(zip_packer):write_txt_file_to_zippack(zip_packer,"1.txt","hhhhh&qu…

SpringBoot基础Kafka示例

这里将生产者和消费者放在一个应用中 使用的Boot3.4.3 引入Kafka依赖 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId> </dependency>yml配置 spring:application:name: kafka-1#kafka…

µCOS-III从入门到精通 第十三章(事件标志组)

参考教程&#xff1a;【正点原子】手把手教你学UCOS-III实时操作系统_哔哩哔哩_bilibili 一、事件标志组简介 1、概述 &#xff08;1&#xff09;事件标志位是一个“位”&#xff0c;用来表示事件是否发生。 &#xff08;2&#xff09;事件标志组是一组事件标志位的集合&am…

LiveGBS流媒体平台GB/T28181常见问题-视频流安全控制HTTP接口鉴权勾选流地址鉴权后401Unauthorized如何播放调用接口流地址校验

LiveGBS流媒体平台GB/T28181常见问题频流安全控制HTTP接口鉴权勾选流地址鉴权后401Unauthorized如何播放调用接口流地址校验&#xff1f; 1、安全控制1.1、HTTP接口鉴权1.2、流地址鉴权 2、401 Unauthorized2.1、携带token调用接口2.1.1、获取鉴权token2.1.2、调用其它接口2.1.…

短视频下载去水印,用什么工具好?

去除视频和图片水印是许多用户的需求&#xff0c;尤其是在分享或保存内容时。以下是6款超好用的工具&#xff0c;帮助你轻松去除水印&#xff0c;享受纯净的视觉体验&#xff1a; 1. 易下载去水印小程序 特点&#xff1a; 操作简单&#xff0c;支持抖音、快手、小红书、哔哩哔哩…

Java Collection(3)——BinaryTree(二叉树)

前言 1.掌握树的基本概念 2.掌握二叉树概念及特性 3.掌握二叉树的基本操作 后面的优先级队列(大根堆&#xff0c;小根堆)也是基于二叉树实现的&#xff0c;所以理解好二叉树至关重要 1.树形结构 1.1描述 树是一种非线性的数据结构&#xff0c;它是由不为零个有限结点组成一…

[Echarts]图例换行时icon对齐标题

当前效果 目标效果 让图例中的“点”和标题同一行 代码 const data [{value: 100,name: 未标注},{value: 100,name: 已标注},{value: 100,name: 标注中} ];option {tooltip: {backgroundColor: #fff,extraCssText: box-shadow: 0px 0px 10px 0px rgba(0,0,0,0.15);,backgro…

Scala编程_实现Rational的基本操作

在Scala中实现一个简单的有理数&#xff08;Rational&#xff09;类&#xff0c;并对其进行加法、比较等基本操作. 有理数的定义 有理数是可以表示为两个整数的比值的数&#xff0c;通常形式为 n / d&#xff0c;其中 n 是分子&#xff0c;d 是分母。为了确保我们的有理数始终…

责任链模式如何减少模块之间的耦合

责任链模式如何减少模块之间的耦合 在复杂的软件系统中&#xff0c;模块之间的耦合是一个常见的问题。高耦合的代码不仅增加了维护成本&#xff0c;还会导致系统的扩展性和灵活性受限。当我们需要为不同的请求设计灵活的处理逻辑时&#xff0c;传统的硬编码方式会将请求的发送…

【最新】DeepSeek 实用集成工具有那些?

deepseek 系列github仓库地址 【主页】deepseek-aiDeepSeek-R1DeepSeek-V3DeepSeek-VL2【本文重点介绍】awesome-deepseek-integration 注意&#xff1a;以下内容来自awesome-deepseek-integration DeepSeek 实用集成&#xff08;awesome-deepseek-integration&#xff09; 将…

如何在Python下实现摄像头|屏幕|AI视觉算法数据的RTMP直播推送

技术背景 在直播应用开发中&#xff0c;RTMP推流是核心功能之一。本文将结合大牛直播SDK的Python接口实现&#xff0c;详细讲解如何在Python环境下进行RTMP推流开发。好多开发者都知道&#xff0c;在发布Python的RTMP推流demo示例之前&#xff0c;我们十年前已经发布了非常稳定…