Qt创建动态库并添加动态库版本号

在使用Qt开发过程中,我们有时需要使用Qt创建动态库,通常情况下创建的动态库没有版本号,为了方便追综版本,需要为动态库也添加版本号,这样方便代码的版本控制,那么如何操作了,只需要在Qt的工程文件中(.pro)添加这个字段即可VERSION = 5.5.0但这样创建的动态库会在生成的动态库名称上把主版本也加上去,如mydemo5.dll,那么如何创建mydemo.dll的动态库并带版本号呢,其实添加VERSION后会生成资源文件mydemo_resource.rc,在这个资源文件里改版本号即可,如果添加了这个资源文件RC_FILE += mydemo_resource.rc,这个时候就不用再添加VERSION这个字段了,具体操作代码如下:

按这个步骤,填写相关名字,生成动态库工程

 添加代码,mydemo.pro工程文件

QT -= gui


TARGET = mydemo #动态库名称
TEMPLATE = lib
win32: CONFIG += c++11
else: macos:CONFIG += c++11 staticlib
DESTDIR = ../bin
#VERSION = 5.5.0   #生成mydemo_resource.rc文件,但这样生成的动态库会加上主版本号,即mydemo5.dll

DEFINES += MYDEMO_LIBRARY

#应用程序调用动态库方式 LIBS += -L$$DESTDIR -lmydemo

win32{ # windows 支持
    #动态库的名称由mydemo_resource.rc文件内容控制
    RC_FILE += mydemo_resource.rc
}

# 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 += \
    mydemo.cpp

HEADERS += \
    mydemo_global.h \
    mydemo.h

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

 mydemo_resource.rc文件

#include <windows.h>

VS_VERSION_INFO VERSIONINFO
	FILEVERSION 5,5,0,3518
	PRODUCTVERSION 5,5,0,3518
	FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
	FILEFLAGS VS_FF_DEBUG
#else
	FILEFLAGS 0x0L
#endif
	FILEOS VOS__WINDOWS32
	FILETYPE VFT_DLL
	FILESUBTYPE 0x0L
	BEGIN
		BLOCK "StringFileInfo"
		BEGIN
			BLOCK "040904b0"
			BEGIN
				VALUE "CompanyName", "\0"
				VALUE "FileDescription", "\0"
				VALUE "FileVersion", "5.5.0.3518\0"
				VALUE "LegalCopyright", "\0"
				VALUE "OriginalFilename", "mydemo.dll\0"
				VALUE "ProductName", "mydemo\0"
				VALUE "ProductVersion", "5.5.0.3518\0"
			END
		END
		BLOCK "VarFileInfo"
		BEGIN
			VALUE "Translation", 0x0409, 1200
		END
	END
/* End of Version info */

mydemo_global.h文件

#ifndef MYDEMO_GLOBAL_H
#define MYDEMO_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(MYDEMO_LIBRARY)
#  define MYDEMO_EXPORT Q_DECL_EXPORT
#else
#  define MYDEMO_EXPORT Q_DECL_IMPORT
#endif

#endif // MYDEMO_GLOBAL_H

mydemo.h文件

#ifndef MYDEMO_H
#define MYDEMO_H

#include "mydemo_global.h"
#include <QObject>
#include <QDebug>
#include <QString>

class MYDEMO_EXPORT Mydemo
{
    //Q_OBJECT

public:
    Mydemo();


    QString getBuildCpuArchitecture();
    QString getCurrentCpuArchitecture();
    QString getKernelType();
    QString getKernelVersion();
    QString getMachineHostName();
    QString getPrettyProductName();
    QString getProductType();
    QString getProductVersion();

};

#endif // MYDEMO_H

 mydemo.cpp文件

#include "mydemo.h"
#include <QSysInfo>

Mydemo::Mydemo()
{
}


QString Mydemo::getBuildCpuArchitecture()
{
    return QSysInfo::buildCpuArchitecture();
}

QString Mydemo::getCurrentCpuArchitecture()
{
    return QSysInfo::currentCpuArchitecture();
}

QString Mydemo::getKernelType()
{
    return QSysInfo::kernelType();
}

QString Mydemo::getKernelVersion()
{
    return QSysInfo::kernelVersion();
}

QString Mydemo::getMachineHostName()
{
    return QSysInfo::machineHostName();
}

QString Mydemo::getPrettyProductName()
{
    return QSysInfo::prettyProductName();
}


QString Mydemo::getProductType()
{
    return QSysInfo::productType();
}

QString Mydemo::getProductVersion()
{
    return QSysInfo::productVersion();
}

 测试工程QtCallQtCustomDll.pro

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

DESTDIR = ../bin

VERSION = 5.5.0

LIBS += -L$$DESTDIR -lmydemo

# 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 += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

mainwindow.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

public slots:
    void slotShowSystemInfo();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "../mydemo/mydemo.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->pushButton_showSysInfo, SIGNAL(clicked()), this, SLOT(slotShowSystemInfo()));
}

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

void MainWindow::slotShowSystemInfo()
{
    qDebug() << "slotShowSystemInfo=========================";
    Mydemo mydemo;
    QString buildCpuArchitecture = mydemo.getBuildCpuArchitecture();
    QString currentCpuArchitecture = mydemo.getCurrentCpuArchitecture();
    QString kernelType = mydemo.getKernelType();
    QString kernelVersion = mydemo.getKernelVersion();
    QString machineHostName = mydemo.getMachineHostName();
    QString prettyProductName = mydemo.getPrettyProductName();
    QString productType = mydemo.getProductType();
    QString productVersion = mydemo.getProductVersion();
    ui->lineEdit_BuildCpuArchitecture->setText(buildCpuArchitecture);
    ui->lineEdit_CurrentCpuArchitecture->setText(currentCpuArchitecture);
    ui->lineEdit_KernelType->setText(kernelType);
    ui->lineEdit_KernelVersion->setText(kernelVersion);
    ui->lineEdit_MachineHostName->setText(machineHostName);
    ui->lineEdit_PrettyProductName->setText(prettyProductName);
    ui->lineEdit_ProductType->setText(productType);
    ui->lineEdit_ProductVersion->setText(productVersion);
}

main.cpp文件

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

测试结果:

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在 Qt 中使用 OpenCV 库,需要进行以下步骤: 1. 首先,确保已安装 OpenCV 库。可以从官方网站下载最新版本的 OpenCV。 2. 打开 Qt Creator,创建一个新的 Qt Widgets 应用程序项目。 3. 将 OpenCV 库的头文件和库文件复制到项目根目录下的 "opencv" 文件夹中。例如,将 "include" 文件夹和所有 ".lib" 文件复制到 "opencv" 文件夹中。 4. 在 Qt Creator 中打开项目文件 ".pro",并添加以下行: ``` INCLUDEPATH += $$PWD/opencv/include LIBS += -L$$PWD/opencv/lib -lopencv_coreXXX -lopencv_highguiXXX -lopencv_imgprocXXX ``` 其中,XXX 是 OpenCV 版本号。 5. 重新构建项目并运行。现在可以在项目中含 OpenCV 的头文件并使用相应的函数了。 注意,如果使用的是动态链接库,需要将 ".dll" 文件复制到项目的输出目录中。可以在 Qt Creator 中添加一个自定义构建步骤来自动完成此操作。 ### 回答2: 在Qt添加OpenCV库主要分为以下几个步骤: 1. 首先,下载并安装Qt和OpenCV。确保两者都已正确安装和配置。 2. 打开Qt Creator,创建一个新的Qt项目。 3. 在项目文件夹中创建一个“lib”文件夹,并将OpenCV的库文件拷贝到该文件夹中。这些库文件通常以“lib”开头并以“.so”或“.dll”为后缀。 4. 在Qt Creator中打开项目的.pro文件(项目配置文件)。 5. 找到“LIBS +=”一行,将OpenCV的库文件路径添加到其中。例如,如果你的OpenCV库文件位于“/usr/lib”文件夹下,可以添加类似的行:LIBS += -L/usr/lib -lopencv_core -lopencv_imgproc -lopencv_highgui 等。 6. 在项目的.h或.cpp文件中,添加对OpenCV库的头文件引用。例如,可以使用#include <opencv2/core/core.hpp>、#include <opencv2/imgproc/imgproc.hpp>等。 7. 使用OpenCV的函数和类来完成你的项目开发。你可以在OpenCV的官方文档中找到OpenCV库所提供的各种功能和使用方法。 8. 编译和运行你的Qt项目,确保能够正确地使用OpenCV库。 以上就是在Qt添加OpenCV库的大致步骤。需要注意的是,具体的步骤可能因Qt和OpenCV的版本而有所不同,可以根据自己的情况进行相应的调整。 ### 回答3: 在Qt添加OpenCV库,可以按照以下步骤进行操作: 1. 首先,下载并安装合适的OpenCV库。可在OpenCV官方网站(https://opencv.org/)下载最新的OpenCV库。 2. 打开Qt Creator,创建一个新的Qt项目。 3. 在项目文件夹中创建一个新的文件夹,将下载好的OpenCV库文件解压到该文件夹内。 4. 在Qt Creator中,打开.pro项目文件。这是一个文本文件,其中记录了项目的配置信息。 5. 在.pro文件中,添加以下行来告诉Qt编译器去链接OpenCV库: ``` INCLUDEPATH += 你的OpenCV库文件夹路径/include LIBS += -L你的OpenCV库文件夹路径/lib -lopencv_core -lopencv_highgui -lopencv_imgproc ``` 其中,你需要将“你的OpenCV库文件夹路径”替换为你解压OpenCV库的文件夹的路径。 6. 在Qt Creator中,右键点击项目文件夹,选择“添加已存在的文件”,在弹出的窗口中选择解压OpenCV库的文件夹,然后选择“选择文件夹”。 7. 编写你的Qt程序,引入OpenCV头文件,并使用OpenCV库的函数。 8. 在Qt Creator中,点击编译按钮,进行编译和运行。 总结:以上步骤是在Qt Creator中添加OpenCV库的一般方法,可以根据具体情况进行调整。在完成以上步骤之后,你就可以在Qt项目中使用OpenCV库的功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值