0
点赞
收藏
分享

微信扫一扫

Qt创建动态链接库及调用(创建子目录项目、创建动态链接库、多核编译设置、主工程配置库文件、存在运行不出来的问题)

boomwu 2022-01-20 阅读 51
qt

使用dll的形式开发项目,十分适合团队合作开发大型项目,易于扩展,库之间相对独立,可以独立编译,并且也可以保护源码。
本文Qt创建的动态链接库dll被称为驱动,本节演示如何创建动态链接库,并进行调用,最终实现UI上的加法器。

1.创建子目录项目

创建项目,选择“其他项目”–>“子目录项目”,
在这里插入图片描述
创建名称,选择地址
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
先不用添加子项目,选择“cancel”
在这里插入图片描述
生成的.pro文件中如图所示:
在这里插入图片描述

TEMPLATE = subdirs   //代表生成一个子目录项目

2.创建主工程

添加一个子项目,在Plugin上右键,选择“新子项目”
在这里插入图片描述
打开后,选择“Application”–>“Qt Widgets Application”
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将子项目“MainApp”添加到“Plugin.pro”中
在这里插入图片描述
点击“完成”,此时MainApp的.pro文件中内容如下图:
在这里插入图片描述
Plugin.pro中内容如下:
在这里插入图片描述
可以看到,多了SUBDIRS,里面的MainApp即为Plugin.pro的子项目。

//MainApp为Plugin.pro的子项目
SUBDIRS += \   
    MainApp

多核编译设置:Qt做编译的时候默认是使用一个核运算,有些大的项目运行起来会特别慢,因此可以在项目中设置多多核编译。下图是设置为4核编译图。
在这里插入图片描述

对MainApp子项目进行编译
在这里插入图片描述
编译后MainApp内,地址设置的有些乱,后期设置时还是需要注意,此处就不改了:
在这里插入图片描述

3.创建库插件

添加一个库插件:
在这里插入图片描述
选择“Library”–>“C++库”
在这里插入图片描述
选择“共享库”
在这里插入图片描述
根据需要选择模块,此处只选择了“QtCore”
在这里插入图片描述
在这里插入图片描述
MathPlugin.pro的内部如下:
在这里插入图片描述
可以看到自动生成了“mathplugin_global.h”文件,内部如下图:
在这里插入图片描述

Plugin.pro中插入了MathPlugin插件
在这里插入图片描述
在MathPlugin.h和.cpp中设置加法函数:此处注意,在.h文件中声明了函数,自动在.cpp中生成函数实现的快捷键为Alt+Enter
在这里插入图片描述

#ifndef MATHPLUGIN_H
#define MATHPLUGIN_H

#include "mathplugin_global.h"

class MATHPLUGINSHARED_EXPORT MathPlugin
{

public:
    MathPlugin();
    ~MathPlugin();

    double add(double d1,double d2);
};

#endif // MATHPLUGIN_H

MATHPLUGINSHARED_EXPORT跳转进去可以看到其为宏定义# define MATHPLUGINSHARED_EXPORT Q_DECL_EXPORTQ_DECL_EXPORT是Qt定义的可以被外部模块引用的宏,其内部为# define Q_DECL_EXPORT __declspec(dllexport)其中__declspec(dllexport)为标准C++中定义的库可以被外部引用的宏定义,如果需要把QT代码写成C++形式就可以利用此。
在这里插入图片描述

4.UI创建

UI中添加对应“linedit”,“pushbutton”及“label”,在pushbutton上选择“转到槽”
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.为主工程设置库文件

界面创建好之后,怎么去使用插件MathPlugin进行计算呢?
在MainApp上右键,选择“添加库”
在这里插入图片描述
选择“内部库”
在这里插入图片描述
选择MainApp中插入的库文件“MathPlugin”,选择平台为“Windows”,然后“next”
在这里插入图片描述
然后完成
在这里插入图片描述
MainApp.pro中就会增加下面红框中的内容
在这里插入图片描述

win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../MathPlugin/release/ -lMathPlugin
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../MathPlugin/debug/ -lMathPlugin

指明release, debug两种模式下的路径

INCLUDEPATH += $$PWD/../MathPlugin
DEPENDPATH += $$PWD/../MathPlugin

添加工作目录到应用程序

6.添加加法功能代码及实现

mainwindow.cpp中添加#include "mathplugin.h"及实现代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mathplugin.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

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

void MainWindow::on_pushButton_add_clicked()
{
MathPlugin math;
ui->lineEdit_add=math.add(QString::number(ui->lineEdit_d1->text(),ui->lineEdit_d2->text()));
}

如果添加了#include "mathplugin.h"之后,显示找不到,可以将2个子工程分别编译即可解决问题。

7.运行结果及问题

整体进行构建,debug运行。
在这里插入图片描述
实现一个加法器的功能界面(本人的程序运行出来报错,但整个流程是没有问题的)
在这里插入图片描述
正常运行的提示:
在这里插入图片描述
我的出错提示:

8:07:21: 为项目Plugin执行步骤 ...
18:07:21: 正在启动 "C:\Qt\Qt5.9.4\5.9.4\msvc2017_64\bin\qmake.exe" D:\SelfProgram\QTTest\Plugin\MathPlugin\MathPlugin.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug"

18:07:21: 进程"C:\Qt\Qt5.9.4\5.9.4\msvc2017_64\bin\qmake.exe"正常退出。
18:07:21: 正在启动 "C:\Qt\Qt5.9.4\Tools\QtCreator\bin\jom.exe" qmake_all


jom 1.1.2 - empower your cores

18:07:22: 进程"C:\Qt\Qt5.9.4\Tools\QtCreator\bin\jom.exe"正常退出。
18:07:22: 正在启动 "C:\Qt\Qt5.9.4\Tools\QtCreator\bin\jom.exe" -r -j4

	 -f Makefile.Debug
'-f' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
jom: D:\SelfProgram\QTTest\Plugin\MathPlugin\Makefile [debug] Error 1
18:07:22: 进程"C:\Qt\Qt5.9.4\Tools\QtCreator\bin\jom.exe"退出,退出代码 2 。
Error while building/deploying project Plugin (kit: Desktop Qt 5.9.4 MSVC2017 64bit)
When executing step "Make"
18:07:22: Elapsed time: 00:01.

等有时间了研究一下怎么回事

举报

相关推荐

0 条评论