前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

QT DLL 创建QT窗口

qiguaw 2025-05-22 12:50:51 资源文章 2 ℃ 0 评论


在 Qt 中,可以在 DLL 中创建和显示窗口。

首先,在 DLL 项目中需要添加如下的头文件和代码:

#include <QWidget>
#include <QVBoxLayout>

class MyWidget : public QWidget
{
public:
    MyWidget(QWidget* parent = nullptr)
        : QWidget(parent)
    {
        QVBoxLayout* layout = new QVBoxLayout(this);
        QLabel* label = new QLabel("Hello from DLL", this);
        layout->addWidget(label);
    }
};

上述代码定义了一个名为 MyWidget 的 QWidget 子类,并在构造函数中添加了一个垂直布局和一个标签。

然后,在 DLL 中需要添加一个新的导出函数,用于创建和显示窗口。该函数的实现如下:

#include "MyWidget.h"

void __declspec(dllexport) createAndShowWindow()
{
    QApplication app(__argc, __argv);
    MyWidget* widget = new MyWidget();
    widget->show();
    app.exec();
}

上述代码创建了一个 QApplication 对象,创建了一个 MyWidget 对象,并调用 show() 方法来显示窗口。最后调用 exec() 方法进入事件循环。

在主程序中,可以使用 QLibrary 类来加载 DLL 并调用导出函数。代码示例如下:

QLibrary lib("mydll.dll");
if (lib.load())
{
    typedef void (*Func)();
    Func createAndShowWindow = reinterpret_cast<Func>(lib.resolve("createAndShowWindow"));
    if (createAndShowWindow)
    {
        createAndShowWindow();
    }
    else
    {
        qDebug() << "Failed to resolve function";
    }
    lib.unload();
}
else
{
    qDebug() << "Failed to load DLL";
}

上述代码使用 QLibrary 类加载 DLL,然后通过 resolve() 方法获取导出函数的地址,并转换为函数指针类型。最后调用该函数即可显示窗口。

需要注意的是,在主程序中使用 QLibrary 加载 DLL 时,需要确保 DLL 文件的路径正确,并且 DLL 文件和主程序的架构一致(如都为 x64 或 x86)。

另外,因为在 DLL 中创建了 QApplication 对象,因此需要确保主程序中没有创建过 QApplication 对象,否则会发生错误。可以将主程序中的 QApplication 对象创建部分放置到 DLL 中的导出函数中。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表