提要

此文分别就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();
}

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

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

  1. QT添加qss文件和资源文件

    先右键项目,选择 Add New 选择一个模板,选择 Qt 模板,再选择 Qt Resource Files,点击 Choose 填上资源文件的名称,默认添加项目路径下.后面的步骤默认即可,点击完成 ...

  2. QT 生成.so动态库默认生成.so .so.1 .so.1.0 .so.1.0.0

    QT 生成.so动态库时,会默认生成.so .so.1 .so.1.0 .so.1.0.0四个文件,其中其他三个文件都是指向.so.1.0.0这个实际的库文件的链接文件,为了版本控制. 要想直接生成. ...

  3. 【Unity】励志成为最强UI仔—BeaverJoe项目之UI界面制作【上】代码优化-动态加载UI对象

    跟BeaverJoe老师学习UI界面制作中,在原先的项目中,角色的solt是静态的五个角色.所以我想把他改成一个动态通过PlayerGM来控制的一个动态加载UI 效果展示 /// <summar ...

  4. 解决pycharm QtDesigner生成.ui文件转为.py文件运行不出现界面的方法(信号与槽生成的除外)

    解决pycharm QtDesigner生成.ui文件转为.py文件运行不出现界面的方法(信号与槽生成的除外,会报错闪退) 一般需要导入下面两个包 from PyQt5.QtWidgets impor ...

  5. linux 生成dll文件,Linux和Windows平台 动态库.so和.dll文件的生成

    Linux动态库的生成 1. 纯cpp文件打包动态库 将所有cpp文件和所需要的头文件放在同一文件夹,然后执行下面命令 gcc -shared - fpic *.c -o xxx.so: g++ -s ...

  6. Qt 生成 ui 对应的 h 文件和 cpp 文件的方法

    2018-04-04 创建人:Ruo_Xiao 开发环境:Qt 5.2.1 邮箱:xclsoftware@163.com 将ui文件copy到uic.exe同一目录下(qt的安装目录中bin下). 打 ...

  7. QT生成和使用静态链接库

    目录 1.生成静态链接库 2.使用静态链接库 生成静态链接库,目的有两个:1.加快编译速度,也即:库文件被加入到工程中,无需再次编译,编译器只编译你写的c/cpp,然后与加进来的库进行连接,以生成可执 ...

  8. linux调用qt生成静态库文件下载,Centos7下编译openssl静态库与QT引用

    1.下载openssl版本:https://www.openssl.org/source/old/ 下载地址 2.我们下载版本为:openssl-1.0.2k 3.拷贝到Linux服务器任意目录 4. ...

  9. Python Qt GUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)

    目录 1.创建项目 2.将.ui文件生成.py文件 2.1.Eric 6编译 2.2.Python命令行编译 2.3.脚本编译 3.界面.逻辑分离思想 在开始本文之前提醒各位朋友,Python记得安装 ...

最新文章

  1. 欢迎大家观顾【图灵教育社区】
  2. SAP UB类型的STO能自动创建交货单?
  3. vmmem 内存占用高
  4. dagger2记录篇
  5. 作业二:个人博客作业内容:需求分析
  6. excel去重_数据处理之EXCEL的高效技巧分享
  7. python 遍历数组根据规律拆分,python 实现以相同规律打乱多组数据
  8. Android:Eclipse如何删除ADT
  9. Python——格式转换的学习笔记
  10. 计算机三级c语言题库,全国计算机三级C语言上机题库.doc
  11. 计算机视觉基础教程笔记索引
  12. 从算法原理到应用部署!微信「扫一扫识物」 的背后技术揭秘
  13. NeurIPS 2021 放榜!旷视研究院5篇接收论文亮点解读!
  14. Android性能优化系列篇(二):启动优化
  15. 计算机领域的世界之最,超级计算机神威·太湖之光世界最快(中国这五年的世界之最④)...
  16. linux btrfs文件系统,btrfs 文件系统
  17. window 下蓝牙开发
  18. 【计算机毕业设计】269购物商城网站的设计与实现
  19. Flink SQL自定义connector
  20. 2018前端面试题 css 部分

热门文章

  1. 扫盲贴|如何评价一款App的稳定性和质量?
  2. Dubbo Mesh | 阿里巴巴中间件团队在 Service Mesh 的实践和探索(附PPT)
  3. 阿里云大数据利器之-RDS迁移到Maxcompute实现动态分区
  4. 极狐(GitLab)宣布获数亿元A轮融资,将加速推动中国开源DevOps生态
  5. 2021信服云创新峰会:托管云成上云第三种选择
  6. Gartner:阿里云蝉联全球第三、亚太第一
  7. 云+X案例展 | 民生类:贝斯平云助力500强跨国企数字化转型
  8. 反转!美光、英特尔等多家美企恢复对华为供货;首例云服务器存储侵权案改判,阿里云不担责;英国政府拟严格审查Libra……...
  9. Kafka精华问答 | Kafka的主要应用场景有哪些?​
  10. linux mysql 开启异步io_Linux 异步IO介绍