Qt 使用vs2019制作Qt静态库( *.lib )并使用

news2024/12/26 23:23:34

一 .创建静态库

1.创建Qt Class Library(Qt静态类库)项目

在这里插入图片描述

2.设置项目名以及项目路径(注意:不能有中文字符)

在这里插入图片描述
点击next

3.选则需要的模式以及Qt 模块

在这里插入图片描述
然后点击next,Finish完成创建

4. 然后手动添加Qt Widget Form File (.ui)并对设计ui

在这里插入图片描述在这里插入图片描述

5. tpendialog.h

#pragma once
#include "qtlibdemo_global.h"
#include <qdialog.h>
#include <qpen.h>
#include "ui_tpendialog.h"
class QTLIBDEMO_EXPORT tpendialog: public QDialog
{
    Q_OBJECT
public:
    tpendialog(QWidget* parent = nullptr);
    ~tpendialog();
    //设置QPen对象,用于对话框的界面显示
    void    setPen(QPen& pen);  
    //获取对话框设置的QPen的属性
    QPen    getPen();           
    //静态函数
    static  QPen  getPen(QPen& iniPen, bool* ok);  
private slots:
    void on_btnColor_clicked();
private:
    QPen  m_pen;  //成员变量
    Ui::PenDialog* ui;
};

6. tpendialog.cpp

#include "tpendialog.h"
#include <qcolordialog.h>
tpendialog::tpendialog(QWidget* parent)
	:QDialog(parent),ui(new Ui::PenDialog)
{
	ui->setupUi(this);
    //“线型”ComboBox的选择项设置
   // void addItem(const QString &text, const QVariant &userData = QVariant())
    ui->comboPenStyle->clear();
    ui->comboPenStyle->addItem("NoPen");       
    ui->comboPenStyle->addItem("SolidLine");   
    ui->comboPenStyle->addItem("DashLine");
    ui->comboPenStyle->addItem("DotLine");
    ui->comboPenStyle->addItem("DashDotLine");
    ui->comboPenStyle->addItem("DashDotDotLine");
    ui->comboPenStyle->setCurrentIndex(1);
}

tpendialog::~tpendialog()
{
	delete ui;
}
void tpendialog::setPen(QPen& pen)
{
    //初始化Pen,并刷新显示界面
    m_pen = pen;      //保存到成员变量
    ui->spinWidth->setValue(pen.width()); //线宽
    int i = static_cast<int>(pen.style());  //枚举类型转换为整型
    ui->comboPenStyle->setCurrentIndex(i);

    QColor  color = pen.color();
    ui->btnColor->setAutoFillBackground(true); //设置颜色按钮的背景色
    QString str = QString::asprintf("background-color: rgb(%d, %d, %d);",
        color.red(), color.green(), color.blue());
    ui->btnColor->setStyleSheet(str);
}
QPen tpendialog::getPen()
{
    //获得设置的Pen
    m_pen.setStyle(Qt::PenStyle(ui->comboPenStyle->currentIndex()));    //线型
    m_pen.setWidth(ui->spinWidth->value());     //线宽

    QColor  color;
    color = ui->btnColor->palette().color(QPalette::Button);
    m_pen.setColor(color);  //颜色
    return  m_pen;
}
QPen tpendialog::getPen(QPen& iniPen, bool* ok)
{
    //静态函数,获取QPen
    tpendialog* dlg = new tpendialog; //创建一个对话框
    dlg->setPen(iniPen); //设置初始化Pen

    QPen    pen;
    int ret = dlg->exec(); //弹出对话框
    if (ret == QDialog::Accepted)
    {
        pen = dlg->getPen(); //获取
        *ok = true;
    }
    else
    {
        pen = iniPen;
        *ok = false;
    }
    delete  dlg; //删除对话框对象
    return  pen; //返回设置的QPen对象
}
void tpendialog::on_btnColor_clicked()
{
    //设置颜色
    QColor  color = QColorDialog::getColor();
    if (color.isValid())
    { //用样式表设置QPushButton的背景色
        QString str = QString::asprintf("background-color: rgb(%d, %d, %d);",
            color.red(), color.green(), color.blue());
        ui->btnColor->setStyleSheet(str);
    }
}

7. 编译项目.lib和.dll文件

在这里插入图片描述

二. 使用静态库

1. 创建新项目使用静态库

在这里插入图片描述

2. 选择对应的qt模块

在这里插入图片描述后面一路next,最后Finsh

3.设计ui

在这里插入图片描述

4. MainWindow.h

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_mainwindow.h"
#include <qpen.h>
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

protected:
    void    paintEvent(QPaintEvent* event);

private slots:
    void on_action_Pen_triggered();
private:
    Ui::MainWin *ui;
    QPen  m_pen;
};

5. MainWindow.cpp

#include "MainWindow.h"
#include <qpainter.h>
#include <QPaintEvent>
#include "tpendialog.h"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent),ui(new Ui::MainWin)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::paintEvent(QPaintEvent* event)
{
    QPainter  painter(this);
    QRect rect(0, 0, width(), height());   //viewport矩形区
    painter.setViewport(rect);             //设置Viewport
    painter.setWindow(0, 0, 100, 50);      //设置窗口大小,逻辑坐标
    painter.setPen(m_pen);
    painter.drawRect(10, 10, 80, 30);

    event->accept();
}
void MainWindow::on_action_Pen_triggered() 
{

    bool   ok = false;

    QPen   pen = tpendialog::getPen(m_pen, &ok);
    if (ok)
    {
        m_pen = pen;
        this->repaint();
    }
}

6.这里会有报错,将之前项目的ui_tpendialog.h ,tpendialog.h , qtlibdemo_global.h文件复制到当前目录,并建立include文件,然后把之前生成的*.lib文件复制到include目录下

在这里插入图片描述

6.点击项目"属性"->“VC++目录” 设置 库目录和包含目录

在这里插入图片描述

7.在"链接器"->“输入”->"附加依赖项"添加静态库

在这里插入图片描述

8.编译生成,在生成的exe文件里添加之前生成的*.llb文件

在这里插入图片描述

9.执行程序,加载Qt库就完成啦

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1386904.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VScode远程连接开发嵌入式开发板

在做嵌入式开发时&#xff0c;很多时候需要远程连接或者远程调试设备&#xff0c;这时可以通过VScode上的插件来很方便的进行远程连接和调试。 ssh远程连接嵌入式开发板&#xff1a; 1、安装vscode ssh远程插件&#xff1a;Remote-SSH。 2、点击""&#xff0c;输入…

排序算法之七:归并排序(非递归)

1.非递归实现思路 我们之前学习了递归实现的归并排序&#xff0c;是分治的思想&#xff0c;即先分解&#xff0c;再归并 这篇文章我们讲一下非递归的实现 非递归实现的思路是模拟递归的过程&#xff0c;在递归过程中&#xff0c;我们找key将数组分成左右数组&#xff0c;然后…

Peter算法小课堂—树上建模

太戈编程1720题 题目描述&#xff1a; 传说有一个大家族里共n名男性成员&#xff0c;编号1到n。其中共有n-1条父子关系。现在他们要挑选若干人组成家族护卫队抵抗外族入侵。i号成员的战斗力为z[i], 大家当然希望挑选最强护卫队。但是为了防止“父子矛盾”的魔咒应验&#xff…

【算法】如何不用中间变量交换两个数据?

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法分析与设计知识专栏&#xff1a;算法分析&#x1f525; 给大家跳…

Radzen Blazor Studio 脚手架框架解读

背景 组织管理管理准备使用Blazor这个工具实现&#xff0c;因为其有对应的 scaffold 脚手架&#xff0c;先构建数据库&#xff0c;然后通过向导&#xff0c;生成CRUD以及对应的接口&#xff0c;那么有必要看一下&#xff0c;其内部的代码结构是什么样的。 结构 接口层 有两类…

【RTOS】快速体验FreeRTOS所有常用API(2)任务管理

目录 二、任务管理2.1 任务创建&#xff08;三种方式&#xff09;1&#xff09;动态内存分配方式创建任务2&#xff09;静态内存分配方式创建任务3&#xff09;带有任务参数方式创建任务 2.2 任务删除2.3 两种delay 二、任务管理 该部分在上份代码基础上修改得来&#xff0c;代…

t2vec code

文章目录 数据预处理执行过程训练执行过程preprocess.jl 解释h5 文件结构 数据预处理执行过程 (base) zzqserver1:~/project/t2vec/preprocessing$ julia porto2h5.jl Processing 1710660 trips… 100000 200000 300000 400000 500000 600000 700000 800000 900000 1000000 11…

Halcon轮廓的处理

Halcon轮廓的处理 文章目录 Halcon轮廓的处理1. 轮廓分割2. 轮廓的筛选3. 轮廓的连接4. 轮廓的拟合 输出了目标的轮廓后&#xff0c;接下来还需要对轮廓进行处理&#xff0c;这主要基于以下3个原因。 &#xff08;1&#xff09;对于某些测量任务而言&#xff0c;并不需要分析目…

ArkTS中自定义组件

ArkTS中自定义组件 一、组件位置二、Hello.ets自定义组件自定义组件 三、Second.ets父组件 一、组件位置 一个项目下所有的自定义的组件名不可以重复&#xff0c;无论是否在一个ets文件中 二、Hello.ets自定义组件 自定义组件 1&#xff1a;组件必须使用Component装饰 2&#…

最新智能AI系统ChatGPT网站程序源码+详细图文搭建部署教程,Midjourney绘画,GPT语音对话+ChatFile文档对话总结+DALL-E3文生图

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

Spring Boot接口请求响应慢,超过10秒以上,如无法优化SQL或代码的情况下,建议写入数据库或缓存中,请求接口时从数据库或缓存中读取返回

举例 Override public Map<String, Object> getCockpitStaffAttendanceTask() {Map<String, Object> map new HashMap<>();int chuqin 0; //出勤int queqin 0; //缺勤int chidao 0; //迟到int zaotui 0; //早退//获取所有设备卡号 并且已经绑定了人Lis…

Redis之bigkey

目录 1、什么是bigkey&#xff1f; 2、bigkey大的小 3、bigkey有哪些危害&#xff1f; 4、bigkey如何产生&#xff1f; 5、bigkey如何发现&#xff1f; 6、bigkey如何删除&#xff1f; 7、BigKey调优&#xff0c;惰性释放lazyfree 8、生产上限制keys * /flushdb/flushal…

python爬虫之线程与多进程知识点记录

一、线程 1、概念 线程 在一个进程的内部&#xff0c;要同时干多件事&#xff0c;就需要同时运行多个“子任务”&#xff0c;我们把进程内的这些“子任务”叫做线程 是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。一条线程指…

统计学-R语言-4.1

文章目录 前言编写R函数图形的控制和布局par函数layout函数 练习 前言 安装完R软件之后就可以对其进行代码的编写了。 编写R函数 如果对数据分析有些特殊需要&#xff0c;已有的R包或函数不能满足&#xff0c;可以在R中编写自己的函数。函数的定义格式如下所示&#xff1a; …

DFT新手入门:VASPKIT生成模版INCAR

新手学习VASP计算时一般需要自行准备好VASP所需要的四个输入文件:INCAR POSCAR KPOINTS POTCAR。 其中POSCAR为计算任务的模型文件&#xff0c;POTCAR为与POSCAR中元素所对应的赝势&#xff0c;可根据要求选取。 KPOINTS的设置需要根据精度确定&#xff0c;一般通过vaspkit的1…

鸿蒙开发OpenHarmony组件复用案例

概述 在开发应用时&#xff0c;有些场景下的自定义组件具有相同的组件布局结构&#xff0c;仅有状态变量等承载数据的差异。这样的组件缓存起来&#xff0c;需要使用到该组件时直接复用&#xff0c; 减少重复创建和渲染的时间&#xff0c;从而提高应用页面的加载速度和响应速度…

Win10专业版系统搭建DNS解析服务

Win10专业版 纯新手&#xff0c;也没弄过Linux的。不喜勿喷&#xff0c;有问题请指出 第一天一头雾水整了几个小时没结果&#xff0c;第二天豁然开朗&#xff0c;10分钟明白了第一天的问题所在。 Win10 安卓&#xff1a; iOS&#xff1a; 搭建DNS服务器的意义&#xff1a; 屏蔽…

【Axure高保真原型】移入放大对应区域的饼图

今天和大家分享移入放大对应扇形区域的饼图的原型模板&#xff0c;鼠标移入时&#xff0c;对应扇形区域的会放大&#xff0c;并且的项目和数据弹窗&#xff0c;弹窗可以跟随鼠标移动。这个原型是用Axure原生元件制作的&#xff0c;所以不需要联网或者调用外部图表……具体效果可…

2024年烟花爆竹储存证考试题库及烟花爆竹储存试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年烟花爆竹储存证考试题库及烟花爆竹储存试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大纲随机…