当前位置: 首页 > news >正文

动态库示例

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_H

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;
//按钮默认背景色,字体颜色,border-radius
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://设置styleSheetvoid setButtonStyleSheet(const QString &button, const QString &pressed, const QString &disabled);//设置字体大小void setFontPointSize(int size);//设置字体宽度void setFontWidth(QFont::Weight weight);signals:
};#endif // BASEBUTTON_H

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);
}/*** 设置按钮样式* @param button 基础样式* @param pressed 点击样式* @param disabled 禁用样式*/
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();
}/*** 设置字体大小* @param size*/
void BaseButton::setFontPointSize(int size) {QFont font = this->font();font.setPointSize(size);setFont(font);
}/*** 设置字体宽度* @param weight*/
void BaseButton::setFontWidth(QFont::Weight weight) {QFont font = this->font();font.setWeight(weight);setFont(font);
}
http://www.lryc.cn/news/603662.html

相关文章:

  • 代码随想录算法训练营第三十五天
  • BGP团体属性
  • MybatisPlus-20.插件功能-通用分页实体与MP转换
  • 【IQA技术专题】纹理相似度图像评价指标DISTS
  • AAA 与 FTP:网络认证授权及文件传输的原理与实践
  • 如何在 Ubuntu 24.04 或 22.04 Linux 上安装和运行 Redis 服务器
  • Redis的持久化策略-AOF和RDB(详细图解)
  • 广告投放数据与管理全解析:从数据解读到高效运营
  • ansible 使用更高版本的python版本
  • 设计一个高可用、可拓展、监控报警系统,使用普罗米修斯和grafana,并给出go实现
  • 第2章 cmd命令基础:常用基础命令(1)
  • SQL排查、分析海量数据以及锁机制
  • 微算法科技(NASDAQ:MLGO)应用区块链联邦学习(BlockFL)架构,实现数据的安全传输
  • Java:为什么需要通配符捕获(wildcard capture)
  • 大文件的切片上传和断点续传前后端(Vue+node.js)具体实现
  • 巡台效率:精准胜勤快
  • 基于YOLOP与GAN的图像修复与防御系统设计与实现
  • 把查出来的值加上双引号,并逗号分隔
  • 宇树 G1 部署(九)——遥操作控制脚本 teleop_hand_and_arm.py 分析与测试部署
  • 汇总数据(使用聚集函数)
  • 智能制造的空间度量:机器视觉标定技术解析
  • 微店商品详情接口micro.item_get请求参数响应参数解析
  • 以太坊十年:智能合约与去中心化的崛起
  • Linux文件归档和备份
  • 自动调优 vLLM 服务器参数(实战指南)
  • IDEA中全局搜索快捷键Ctrl+Shift+F为何失灵?探寻原因与修复指南
  • ARM7微处理器的核心优势
  • 如何在Windows操作系统上通过conda 安装 MDAnalysis
  • 继续打卡day6
  • 机器学习线性回归:从基础到实践的入门指南