CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(QtCompLib LANGUAGES CXX)set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)# 查找 Qt5
find_package(Qt5 5 REQUIRED COMPONENTS Core Widgets)# 头文件列表
set(HEADERSbasebutton.hqtcomplib.h)# 源文件列表
set(SOURCESbasebutton.cppqtcomplib.cpp
)# 目标安装目录
set(INSTALL_INCLUDE_DIR "D:/CODE/Library/include")
set(INSTALL_BIN_DIR "D:/CODE/Library/bin")
set(INSTALL_LIB_DIR "D:/CODE/Library/lib")# 创建目标目录
file(MAKE_DIRECTORY ${INSTALL_INCLUDE_DIR})
file(MAKE_DIRECTORY ${INSTALL_BIN_DIR})
file(MAKE_DIRECTORY ${INSTALL_LIB_DIR})# 定义动态库
add_library(QtCompLib SHARED ${SOURCES} ${HEADERS})# 确保 moc 运行
set_target_properties(QtCompLib PROPERTIES AUTOMOC ON)# 定义宏,用于导出类
target_compile_definitions(QtCompLib PRIVATE A_LIBRARY)# 设置输出目录
set_target_properties(QtCompLib PROPERTIESLIBRARY_OUTPUT_DIRECTORY ${INSTALL_BIN_DIR}RUNTIME_OUTPUT_DIRECTORY ${INSTALL_BIN_DIR}ARCHIVE_OUTPUT_DIRECTORY ${INSTALL_LIB_DIR}
)# 链接 Qt 库
target_link_libraries(QtCompLib PRIVATE Qt5::Core Qt5::Widgets)# 复制头文件
foreach(HEADER ${HEADERS})add_custom_command(TARGET QtCompLib POST_BUILDCOMMAND ${CMAKE_COMMAND} -E copy_if_different"${CMAKE_CURRENT_SOURCE_DIR}/${HEADER}""${INSTALL_INCLUDE_DIR}/${HEADER}"COMMENT "Copying ${HEADER} to ${INSTALL_INCLUDE_DIR}")
endforeach()# 安装
install(FILES ${HEADERS}DESTINATION ${INSTALL_INCLUDE_DIR}PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
)
install(TARGETS QtCompLibRUNTIME DESTINATION ${INSTALL_BIN_DIR}LIBRARY DESTINATION ${INSTALL_BIN_DIR}ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
)
qtcomplib.h
#ifndef QTCOMPLIB_H
#define QTCOMPLIB_H#include <QtCore/qglobal.h>#ifdef A_LIBRARY
#define A_SHARED_EXPORT Q_DECL_EXPORT
#else
#define A_SHARED_EXPORT Q_DECL_IMPORT
#endifclass A_SHARED_EXPORT QtCompLib
{
public:QtCompLib();
};#endif
qtcomplib.cpp
#include "qtcomplib.h"QtCompLib::QtCompLib() {}
qtcomplib.h
#ifndef BASEBUTTON_H
#define BASEBUTTON_H#include <QPushButton>
namespace BtnDef{
constexpr int Width = 100;
constexpr int Height = 40;
constexpr int PointSize = 12;
const QString StyleOccupy =QStringLiteral("QPushButton{ %1 } QPushButton:pressed{ %2 } QPushButton:disabled{ %3 }");
const QString Style =QStringLiteral("background-color: rgb(98, 162, 204); color: rgb(255, 255, 255); border-radius:3px;");
const QString PressStyle =QStringLiteral("background-color: rgb(255, 255, 255); border: 2px solid rgb(149, 175, 192); color: rgb(149, 175, 192);");
const QString DisaStyle =QStringLiteral("background-color: rgb(220, 220, 220); color: rgb(168, 168, 168);");
}namespace Global{
const QString DefFamily = QStringLiteral("Microsoft YaHei");
}#ifdef A_LIBRARY
#define A_SHARED_EXPORT Q_DECL_EXPORT
#else
#define A_SHARED_EXPORT Q_DECL_IMPORT
#endifclass A_SHARED_EXPORT BaseButton : public QPushButton
{Q_OBJECT
public:explicit BaseButton(QWidget *parent = nullptr);~BaseButton() override;private:QString buttonstyleSheet;QString pressedstyleSheet;QString disabledstyleSheet;private:void initStyleSheet();public:void setButtonStyleSheet(const QString &button, const QString &pressed, const QString &disabled);void setFontPointSize(int size);void setFontWidth(QFont::Weight weight);signals:
};#endif
basebutton.cpp
#include "basebutton.h"BaseButton::BaseButton(QWidget *parent) : QPushButton(parent)
{setMinimumSize(BtnDef::Width, BtnDef::Height);setText(tr("btn"));buttonstyleSheet.append(BtnDef::Style);pressedstyleSheet.append(BtnDef::PressStyle);disabledstyleSheet.append(BtnDef::DisaStyle);initStyleSheet();QFont btnFont(Global::DefFamily, BtnDef::PointSize, QFont::Light); setFont(btnFont);
}BaseButton::~BaseButton() {}
void BaseButton::initStyleSheet() {QString styleSheet = QString(BtnDef::StyleOccupy).arg(buttonstyleSheet).arg(pressedstyleSheet).arg(disabledstyleSheet);setStyleSheet(styleSheet);
}
void BaseButton::setButtonStyleSheet(const QString &button, const QString &pressed, const QString &disabled) {if (!button.isEmpty()) {buttonstyleSheet.append(button);}if (!pressed.isEmpty()) {pressedstyleSheet.append(pressed);}if (!disabled.isEmpty()) {disabledstyleSheet.append(disabled);}initStyleSheet();
}
void BaseButton::setFontPointSize(int size) {QFont font = this->font();font.setPointSize(size);setFont(font);
}
void BaseButton::setFontWidth(QFont::Weight weight) {QFont font = this->font();font.setWeight(weight);setFont(font);
}