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

提要

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

实现

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

QT -= gui

TEMPLATE = lib
DEFINES += ONEDLL_LIBRARY

CONFIG += 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.0

SOURCES += \
    onedll.cpp

HEADERS += \
    onedll_global.h \
    onedll.h

# Default rules for deployment.
unix {
    target.path = /usr/lib
}
!isEmpty(target.path): INSTALLS += target

DESTDIR = ../mydll#自动生成文件夹mydll,保存生成的动态库

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

QT += gui widgets

TEMPLATE = lib
DEFINES += ONEDLL_LIBRARY

CONFIG += 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.0

SOURCES += \
    onedll.cpp

HEADERS += \
    onedll_global.h \
    onedll.h

# Default rules for deployment.
unix {
    target.path = /usr/lib
}
!isEmpty(target.path): INSTALLS += target

DESTDIR = ../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_OBJECT

public:
    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_OBJECT

public:
    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 QSSQt Style Sheets)是一种界面样式定义文件,用于美化Qt应用程序的界面。它可以轻松地更改应用程序的外观,包括颜色、字体、边框等等。下面是一些关于Qt QSS界面美化文件的要点: 1. 语法:Qt QSS使用类似于CSS的语法,可以定义各种UI元素的样式。可以通过选择器、属性和值的组合来选择和修改UI元素。 2. 文件应用:可以将Qt QSS文件应用于整个应用程序、单个窗口或特定的UI控件。通过使用setStyleSheet()方法,可以将QSS文件加载到应用程序中。 3. 样式修改:Qt QSS文件可以修改各种UI元素的样式和外观。例如,可以更改按钮的颜色、边框和文本样式,也可以更改文本框的颜色和字体。 4. 状态修改:Qt QSS文件还可以根据控件的状态来修改其样式。例如,可以根据鼠标悬停、按下或禁用状态来修改按钮的样式。 5. 层叠样式:Qt QSS支持层叠样式,即可以为不同的控件定义不同的样式,并可以通过选择器的层次结构来覆盖或继承样式。 6. 预定义属性:Qt QSS提供了一些预定义属性,用于快速设置UI元素的样式。例如,可以使用"color"属性设置文本颜色,使用"font-family"属性设置字体。 7. 动态样式:可以在运行时动态地修改Qt QSS文件。通过重新加载或修改QSS文件,可以实现在无需重新编译应用程序的情况下更改界面样式。 总的来说,Qt QSS是一种功能强大的界面美化文件,能够轻松地自定义Qt应用程序的外观和样式。通过使用QSS,可以快速而灵活地修改UI元素的样式,增强应用程序的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肩上风骋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值