Qt带ui项目 打包dll供别的C++程序调用

QT软件
我创建了一个Qt Widgets Application的项目
里面包括了.pro .h 以及main.cpp和widget.cpp 还有一个.ui文件
如何做到打包成一个dll 供别的C++程序使用(不是qt软件里写)

还有就是 调用的时候是别的C++程序传参到dll里来执行 能做到吗

直接编译成dll就可以了。导出函数,可以允许传入参数。

能,新建一个 Library 工程,生成出来就是 .lib 和 .dll
外部C++链接 .lib 运行时就能调用 .dll
再把 需要的 Qt 相关的 dll 拷过去就可以了

创建的时候选择Library,生成dll。
调用者传参到dll,你只需要把接口写好,让调用者看到要传递什么参数就行了。

【以下回答由 GPT 生成】

解决方案:

步骤1:创建动态链接库项目

首先,我们需要在Qt中创建一个动态链接库项目,该项目将会编译成一个.dll文件。以下是具体步骤:

  1. 打开Qt Creator,选择“File” -> “New File or Project”。
  2. 在“New Project”对话框中,选择“Library” -> “C++ Library” -> “C++ Library”的选项,并点击“Choose”。
  3. 在下一个对话框中,选择“Dynamic Library” -> “Plain C++ Library”的选项,并点击“Choose”。
  4. 输入项目名称和路径,并点击“Next”。
  5. 在“Design”选项卡中,选择“Add MinGW”作为编译套件,并点击“Next”。
  6. 在“Class Information”选项卡中,点击“Finish”来创建项目。

步骤2:复制代码和资源文件

现在,我们需要将原始的Qt项目中的代码和资源文件复制到新创建的动态链接库项目中。请按照以下步骤进行操作:

  1. 将原始项目的所有源代码文件(包括.h和.cpp文件)复制到新创建的项目中。
  2. 将原始项目中的.ui文件复制到新创建的项目中。

步骤3:修改.pro文件

接下来,我们需要修改项目配置文件(.pro文件)以确保正确编译和生成dll文件。请按照以下步骤进行操作:

  1. 打开新创建的项目中的.pro文件。
  2. 将TEMPLATE行的值从"lib"更改为"dll"。
  3. 添加以下代码到.pro文件中:
win32 {
    DEFINES += MYLIB_LIBRARY
    LIBS += -L$$PWD/ -lmylib
}

INCLUDEPATH += $$PWD

HEADERS += \
    mylib_global.h \
    widget.h

SOURCES += \
    mylib_global.cpp \
    widget.cpp

FORMS += \
    widget.ui

步骤4:编译项目

现在,我们可以编译项目以生成.dll文件。请按照以下步骤进行操作:

  1. 点击Qt Creator的“Build”按钮或按F5键以开始编译项目。
  2. 编译成功后,将会生成.dll文件。

步骤5:使用生成的.dll文件

现在,我们已经成功地将Qt项目打包成了一个.dll文件。这个.dll文件可以被其他C++程序调用和使用。以下是使用生成的.dll文件的一些指导:

  1. 在其他C++程序中,包含生成的.h文件。例如,如果生成的.dll文件为mylib.dll,则包含mylib.h文件。
  2. 将生成的.dll文件放置在其他C++程序能够访问到的目录中,或者将其路径加入到其他C++程序的库路径中。
  3. 在其他C++程序中使用生成的函数。

例如,假设我们在Qt项目中有一个名为widget的类,并且在该类中定义了一个名为doSomething的函数。以下是如何在其他C++程序中调用该函数的示例代码:

#include "mylib.h"

int main() {
    Widget widget;
    widget.doSomething();
    return 0;
}

问题扩展: 传递参数给dll并执行相应函数

通过其他C++程序向dll传递参数并执行相应函数是可行的。以下是实现该功能的一种可能方式:

  1. 在.dll文件的.h文件中,定义一个可以接收参数的函数。
  2. 在.dll文件的.cpp文件中,实现这个函数,并在其中执行相应的操作。
  3. 在其他C++程序中,使用上述定义的函数来传递参数给.dll文件并执行操作。

例如,假设我们在.dll文件中的widget类中定义了一个名为setParameter的函数,用于接收一个参数,并根据这个参数执行相应的操作。以下是如何在其他C++程序中调用这个函数的示例代码:

#include "mylib.h"

int main() {
    Widget widget;
    int parameter = 123;
    widget.setParameter(parameter);
    return 0;
}

请注意,具体的实现可能会因为你的项目要求和架构而有所不同。以上仅为一种可能的解决方案。



【相关推荐】


  • 这篇博客: Qt项目文件详解中的 Qt的widget.cpp介绍 部分也许能够解决你的问题。

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^