日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/9/27 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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(); }

以上便是動態庫使用的一種方式,貌似還有其它的方式。學海無涯,加油!

總結

以上是生活随笔為你收集整理的qt生成无ui界面动态库,有ui界面的动态库,以及含有资源文件和qss文件的动态库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。