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(HEADERS
basebutton.h
qtcomplib.h
)
# 源文件列表
set(SOURCES
basebutton.cpp
qtcomplib.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 PROPERTIES
LIBRARY_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_BUILD
COMMAND ${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 QtCompLib
RUNTIME 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
#endif
class 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
#endif
class 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);
}