项目简介
qt-material-widgets是一个基于 Qt 小部件的 Material Design 规范实现。
项目地址
项目地址:qt-material-widgets
本地构建环境
Win11 家庭中文版
VS2019
Qt5.15.2 (MSVC2019)
本地构建流程
克隆后的目录结构如图:
直接使用Qt Creator打开.pro(因为我要用在VS项目中,因此这里Kit选择MSVC2019):
直接跑release版本:
报错: libcomponents.a does not exists.
这是因为.a是Linux的库文件格式,在Windows平台上对应的.lib文件格式,生成的库文件名称也有稍许区别。
这里打开examples.pro,将libcomponents.a 改成components .lib,重新编译即可:
可以看到示例程序如下:
实际应用
如何在自己的项目中,使用qt-material-widgets控件库?
通过上面编译可以知道,控件库主要来源于components这个静态库项目,参考examples项目使用控件库的方式:
①添加.h头文件
②添加.lib库文件
头文件
打开components项目目录:
将.h文件单独复制出来(注意只需复制.h即可,无需复制_p.h)。
这个库使用pimpl模式实现,可以隐藏实现细节(所有私有的非虚成员),且可减少代码依赖和编译时间,具体介绍可见:
这里单独新建了一个目录(后续直接将该目录拷贝到自己项目的3方库路径下即可):
include里面的目录结构尽量和components里面的保持一致:
lib目录中拷贝components项目生成的components.lib:
直接将该目录拷贝到自己项目(这里以我的HelloQt5_15_2项目为例)的3方库路径下:
个人习惯用VS2019 + Qt VS Tools开发,在VS2019中打开我的HelloQt5_15_2项目:
配置附件包含目录:
配置库目录:
添加静态库文件:
在控件中使用控件库控件(这里以使用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;
}
编译运行验证:
注意事项
①在Windows上编译,需手动修改下examples.pro中对静态库文件的引用
②手动拷贝头文件时只需拷贝.h即可(无需拷_p.h),同时目录结构尽量哈components项目目录保持一致。
③编译控件库的版本,应和实际使用控件库的项目的编译器版本对应。如:VS2019(MSVC2019)编译的components.lib,无法放在VS2015 (MSVC2015)中使用,因为库文件和项目的版本不一致。
总结
综上,本文通过简单示例,详细介绍了自己克隆并编译开源控件库,然后应用在自己的项目中的完整流程及注意事项。
通过该开源控件库项目,可学到动态库项目的编译和使用以及pimpl设计模式在项目中的实际应用,相信对实际工作会有一定的帮助。