qt生成无ui界面动态库,有ui界面的动态库,以及含有资源文件和qss文件的动态库

提要

此文分别就qt生成纯代码的动态库,含有ui文件的动态库以及含有资源文件qss文件和切图的动态库。

实现

1.纯代码的生成qt库。即没有ui文件的项目。
打开QtCreate,新建文件,选择library.
在这里插入图片描述
接下来填写项目的名称,选择生成的路径,然后到下图所示步骤。
在这里插入图片描述
选择共享库,包含的模块采用默认的Core,由于这里只能选择一个模块,后面再在pro文件中添加所需的模块。类名可以自己修改。然后下一步后到了选择编译器,根据自己需要选择,然后再下一步。到此生成了项目。
如下图:
在这里插入图片描述
打开pro文件,可以看到此时不包含gui模块,因为我们此项目不需要ui界面,所以不改动这个,不过可以通过DESTDIR 参数来指定生成的动态库的位置,这里指定的生成的动态库保存在工程目录下的生成的文件夹mydll下。

QT -= guiTEMPLATE = lib
DEFINES += ONEDLL_LIBRARYCONFIG += c++11# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \onedll.cppHEADERS += \onedll_global.h \onedll.h# Default rules for deployment.
unix {target.path = /usr/lib
}
!isEmpty(target.path): INSTALLS += targetDESTDIR = ../mydll#自动生成文件夹mydll,保存生成的动态库

保持ui文件不变,这时可以直接在onedll.h和onedll.cpp中编写代码,也可以采用重命名的方式修改名字。编写好代码后,直接编译,便会在当前的版本下生成.dll文件(当前针对于windows环境)。
2.带ui界面的动态库
前面创建动态库的方法和上面一样,创建好项目之后,打开pro文件,因为是需要ui界面的,所以要将pro文件做一些修改。需要加上gui和widgets模块。修改后的pro文件如下。

QT += gui widgetsTEMPLATE = lib
DEFINES += ONEDLL_LIBRARYCONFIG += c++11# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \onedll.cppHEADERS += \onedll_global.h \onedll.h# Default rules for deployment.
unix {target.path = /usr/lib
}
!isEmpty(target.path): INSTALLS += targetDESTDIR = ../mydll

在项目上右键添加新文件,在弹出的窗口中选择qt–》设计师界面。
在这里插入图片描述
创建ui界面类,将类名写为和onedll一样,这样可以覆盖原来的onedll文件。
在这里插入图片描述
在这里插入图片描述
点击下一步,再点击完成,这时弹出一个窗口,如下图所示:
在这里插入图片描述
问是否覆盖原有的onedll文件,点击ok。
修改后的项目的结构如下:
在这里插入图片描述
添加ui界面类后,

#ifndef ONEDLL_H
#define ONEDLL_H#include <QDialog>namespace Ui {
class OneDll;
}class OneDll : public QDialog
{Q_OBJECTpublic:explicit OneDll(QWidget *parent = nullptr);~OneDll();private:Ui::OneDll *ui;
};#endif // ONEDLL_H

发现少了之前的宏,由于我们要生成动态库,所以还是要添加上。

#ifndef ONEDLL_H
#define ONEDLL_H#include "onedll_global.h"
#include <QDialog>namespace Ui {
class OneDll;
}class ONEDLL_EXPORT OneDll : public QDialog
{Q_OBJECTpublic:explicit OneDll(QWidget *parent = nullptr);~OneDll();private:Ui::OneDll *ui;
};#endif // ONEDLL_H

修改后为上述内容,这时可以在界面类中编写代码,来构思自己的界面库。编写完之后,同样编译一下就可以在指定的目录DESTDIR = …/mydll下生成库文件。
3.带有资源文件的界面库,包含qss。
首先和之前一样创建库项目,之后由于是界面库,采用和上面2提到的方法一样添加ui界面类文件,修改pro文件和.h类声明中添加导出宏。接下来添加资源文件。在项目文件夹上右键添加新文件,选择资源文件,
在这里插入图片描述
点击choose按钮,出现下面的界面。
在这里插入图片描述
需要添加资源文件所在的文件夹的名称,这里可以自己起名,我用的是qrc,填好之后,点击下一步,再点击完成。此时会出现一个界面如下:
在这里插入图片描述
首先点击添加按钮,出现两个列表,一个是文件,一个是前缀,此时文件是被置灰的,点击前缀,界面生成前缀如下:
在这里插入图片描述
再点击添加按钮,此时两个列表都可以点击,点击文件,会弹出一个文件选择框,选择自己需要添加的图片,添加好需要添加的图片之后,可以按照之前的步骤先添加前缀再添加qss文件,也可以直接添加qss文件,将qss文件与图片添加在同一个前缀下。
接下来,在qss文件中编写样式。然后编译生成库文件。

最后说一下动态库的使用:

纯代码的动态库和具有ui界面的动态库使用是一样的,不一样的是带有资源文件和qss文件的动态库。

纯代码的动态库的使用

在要使用的项目目录下建立头文件文件夹,库文件夹,然后将之前生成库的头文件.h放入到要使用库的项目的头文件夹下面,把生成的动态库拷贝到要使用库的项目的库文件夹下,然后打开要使用库的项目,如下图:
在这里插入图片描述
貌似有人说可以在头文件中只留下共有的部分,私有的可以删除。这样理轮上也时正确的,因为即使是库的头文件,使用时也只能使用公有的,但是我没试过,可以试一下只留下头文件的共有部分。
进入.pro文件,可以在文件末尾添加如下代码:

INCLUDEPATH += $$PWD/include#包含要使用的头文件路径
LIBS += -L$$PWD/lib -lmyDll#包含要使用的动态库路径和库文件

其中指出了动态库需要的头文件路径,动态库的所在路径,以及动态库名字。$$PWD表示工程目录,-l后面表示库文件的名字,不包含后缀.lib。
然后在使用动态库的文件中添加需要使用的头文件,进行使用。

带有资源文件的动态库使用(图片和qss文件)

其它的和上面动态库使用的操作一样,在此基础上需要将使用的图片拷贝到要使用动态库的项目目录下,如下图:
在这里插入图片描述
前提是要保持图片的大致保存路径不变,当时生成库时以images文件夹的形式保存在工程目录下,现在也按照当初的images文件夹的形式放到要使用动态库的项目的工程目录下。因为生成库时文件中对于资源文件的使用使用的是工程目录,现在也得放在工程目录下。至于qss文件,是需要在使用动态库的项目的main函数中加载qss文件,注意这里的文件路径采用工程目录,因为生成动态库时文件存放的地方就是工程目录下。示例代码如下:

#include "dialog.h"#include <QApplication>
#include "../include/containerform.h"
#include "../include/largescreenlistwidget.h"
#include <QFile>int main(int argc, char *argv[])
{QApplication a(argc, argv);QFile file(":/new/prefix1/largescreenlist.qss");if(file.open(QIODevice::ReadOnly)){QString strFile = file.readAll();a.setStyleSheet(strFile);}file.close();ContainerForm c;c.show();return a.exec();
}

以上便是动态库使用的一种方式,貌似还有其它的方式。学海无涯,加油!

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

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

相关文章

太形象了!什么是边缘计算?最有趣的解释没有之一!

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;云计算就像是天上的云&#xff0c;看得见摸不着&#xff0c;像章鱼的大脑&#xff0c;…

qt中使窗口的大小随窗口的内容大小进行调整

提要 窗口用于显示文本信息&#xff0c;当窗口的文本信息变长&#xff0c;原有窗口的大小不足以显示文本信息。这时就需要一个能够根据窗口要显示的文本信息的长度来调整窗口大小的窗口。 示例 效果图&#xff1a; 窗口内容少的时候提示窗口大小&#xff0c;当窗口要显示的…

MyBatisPlus_查询分页篇_入门试炼_02

文章目录1. mapper接口2. 映射文件3. 实战分页1. mapper接口 package com.gblfy.springboot.mybatisplus.mapper;import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.…

看完这篇买车不用坐引擎盖哭啦

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;Kying转自&#xff1a;数据森麟作者介绍&#xff1a;Kying&#xff0…

Qt关闭程序的时候创建json文件,再次启动时重新加载到界面上

提要 当程序关闭后再次打开程序需要加载上一次的按钮名称设置。 思路 关闭程序的时候保存此刻界面按钮的文本&#xff0c;正常情况下只需在程序退出时调用的析构函数的内部实现&#xff0c;将界面所有的按钮文本生成一个文件&#xff0c;在程序下一次启动的时候&#xff0c;…

MyBatis-Plus_快速入门0222

文章目录一、配置1.1、Spring Boot 工程&#xff1a;配置 MapperScan 注解1.2 Spring MVC 工程&#xff1a;配置 MapperScan1.2.1 调整 SqlSessionFactory 为 MyBatis-Plus 的 SqlSessionFactory一、配置 MyBatis-Plus 的配置异常的简单&#xff0c;我们仅需要一些简单的配置即…

什么是云计算基础设施? | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;云计算基础设施是内部系统和公共云之间的软件和硬件层&#xff0c;其融合了许多不同的…

如何将本地代码推送至远程仓库_命令简化版本

如何将本地代码推送至远程仓库&#xff1f; 文章目录一、新仓库1. 初始化README.md2. 初始化Git仓库3. 将工作区的代码添加至暂存区4. 将暂存区的变更文件提交到本地仓库5. 将本地仓库和远程仓库建立连接6. 将本地代码push至远程仓库7. 先拉去代码&#xff0c;在push8. 强制推送…

K8S精华问答 | Kubernetes用的是Docker的容器?

kubernetes&#xff0c;简称K8s&#xff0c;是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用&#xff0c;目标是让部署容器化的应用简单并且高,并提供了应用部署&#xff0c;规划&#xff0c;更新&#xff0c;维护的一种机制。今天&#xff0c;我们就来看看…

qt中生成含有中文的json文件和解析json文件

提要 生成的json文件在程序加载解析时出现上述错误&#xff0c;究其原因是生成json文件过程中编码问题。qt编译器默认的编码格式为utf-8&#xff0c;而windows一般为gbk编码&#xff0c;所以就需要在生成本地json文件的时候将utf-8编码转换为gbk编码。读取json文件的时候&…

MyBatis-Plus_断言

MyBatis-Plus 之断言 文章目录1. 断言代码&#xff1a;2. 源码&#xff1a;3. 释义&#xff1a;4. 举个栗子&#xff1a;5. 异常信息&#xff1a;6. 控制台输出定位7. 查看数据库&#xff1a;1. 断言代码&#xff1a; Assert.assertEquals(5, userList.size());2. 源码&#x…

Twitter 宣布抛弃 Mesos,转向 Kubernetes;全球关键5G专利我国占34%;华为面试要改革?...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go2019伯克希尔股东大会&#x…

qt鼠标进入窗体后,窗体自动置顶

提要 鼠标进入窗体后&#xff0c;窗体自动置顶&#xff0c;鼠标移开窗体后&#xff0c;窗体恢复之前的状态。 示例 运行效果如下&#xff1a; 程序刚启动的效果如下&#xff1a; 鼠标放在某一个窗口上的效果如下&#xff1a; 可实现鼠标放在某一个窗口上该窗口置顶&#x…

MyBatis-Plus_入门试炼03

排除非表字段的3种方式 常见编程场景&#xff1a; 实体类中某个变量不对应数据库的表中的任何字段&#xff0c;用于暂时保存临时数据或者通过某种方式计算或组装的数据。 文章目录一、举个栗子&#xff1a;1.1 在User实体类中&#xff0c;添加remark属性1.2 执行插入操作&#…

SaaS路线图 | 时光机

戳蓝字“CSDN云计算”关注我们哦&#xff01;时光机&#xff1a;搭载这部时光机&#xff0c;带您回顾《程序员》大量优秀文章&#xff0c;重温经典技术干货&#xff0c;我们发现硬核技术永不过时&#xff0c;对于get要点、solve难题、提高自我&#xff0c;仍有非凡意义。作者&a…

qt将光标相对于桌面的位置转换为相对于窗口的位置

提要 鼠标光标获取的位置cursor().pos()是相对于整个屏幕坐标的&#xff0c;鼠标进入窗口的范围内&#xff0c;判断光标是否在窗口中某控件的范围内&#xff0c;就需先将相对于整个电脑屏幕的鼠标位置&#xff0c;转换为相对于当前程序的窗口的位置&#xff0c;然后判断这个坐…

MyBatisPlus_通用service篇_入门试炼_05

文章目录1. service和impl2. 实战1. service和impl package com.gblfy.springboot.mybatisplus.service;import com.baomidou.mybatisplus.extension.service.IService; import com.gblfy.springboot.mybatisplus.entity.User;public interface UserService extends IService&…

SpringCloud微服务如何优雅停机及源码分析 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;Trust_FreeDom转自&#xff1a;码农沉思录本文主要讨论的是微服务注册…

qt自定义行编辑器,用来加载颜色

提要 自定义行编辑器&#xff0c;点击后弹出颜色选择对话框&#xff0c;选择喜欢的颜色&#xff0c;确认后在行编辑器加载选中的颜色。 效果 选中某一个颜色后&#xff0c;行编辑器中加载所选的颜色。 示例 mylineedit.h #ifndef MYLINEEDIT_H #define MYLINEEDIT_H#inclu…

MyBatisPlus_AR篇_入门试炼_06

文章目录1. 实体类2. 实战1. 实体类 原则&#xff1a;继承Model package com.gblfy.springboot.mybatisplus.entity;import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.exten…