項目簡介
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設計模式在項目中的實際應用,相信對實際工作會有一定的幫助。