QT界面工程导出成dll并在其他界面工程调用示例

2023-11-05

一、 首先是生成dll
1、 新建一个qt工程
在这里插入图片描述

2、 在.pro文件做如下修改

TARGET = qtdll
#TEMPLATE = app

DEFINES += dllMainWindow_LIBRARY
TEMPLATE = lib

其中qtdll 是自己dll工程名,dllMainWindow是dll类名,根据自己情况修改
3、 在dllMainWindow.h文件头新增

#if defined(dllMainWindow_LIBRARY)
#  define dllMainWindowSHARED_EXPORT Q_DECL_EXPORT**
#else
#  define dllMainWindowSHARED_EXPORT Q_DECL_IMPORT**
#endif

4、 在dllMainWindow.h的类声明前添加dllMainWindowSHARED_EXPORT

class dllMainWindowSHARED_EXPORT dllMainWindow : public QMainWindow

5、 总的dllMainWindow.h如下

#ifndef DLLMAINWINDOW_H
#define DLLMAINWINDOW_H

#include <QMainWindow>
#include "exportdialog.h"

#if defined(dllMainWindow_LIBRARY)
#  define dllMainWindowSHARED_EXPORT Q_DECL_EXPORT**
#else
#  define dllMainWindowSHARED_EXPORT Q_DECL_IMPORT**
#endif

namespace Ui {
class dllMainWindow;
}

class dllMainWindowSHARED_EXPORT dllMainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit dllMainWindow(QWidget *parent = 0);
    ~dllMainWindow();
    static bool pluginInstance(Qt::HANDLE plugin = 0);

private slots:
    void on_pushButton_clicked();

private:
    Ui::dllMainWindow *ui;

};

#endif // DLLMAINWINDOW_H

6、	dllMainWindow.cpp如下
#include "dllmainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>


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

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

void dllMainWindow::on_pushButton_clicked()
{
    //QMessageBox::about( this, "About QtMfc", "QtMfc Version 1.0\nCopyright (C) 2003" );
    ExportDialog *winh = new ExportDialog(this);
    winh->show();
}

7、 ExportDialog是该界面嵌套的二级子界面,只需要像常规一样添加即可,不需做dll导出修改,根据自己情况可嵌套多个子界面
8、 以下是界面
在这里插入图片描述

9、 设置完后执行qmake和构建即可
在这里插入图片描述

10、 最后拷出生成的.h、dll和lib以备其他界面工程调用

在这里插入图片描述
在这里插入图片描述

二、 然后是在其他工程调用
1、 vs里新建一个qt工程

在这里插入图片描述
在这里插入图片描述

2、 然后在界面里新增一个按钮,比如调用dll
在这里插入图片描述

3、 新增槽函数,只需右键按钮转到槽函数即可
在这里插入图片描述

4、 然后新增槽函数需实现的dll调用
首先添加头文件

#include "dllMainWindow.h"

然后实现dll界面调用

void qtdlluse::on_pushButton_clicked()
{
	dllMainWindow *m_mainwidget = new dllMainWindow(this);
	m_mainwidget->show();
}

5、 将dll的.h放到调用工程的目录下
在这里插入图片描述

6、 将dll的lib和dll拷到调用工程的输出目录
在这里插入图片描述

7、 最后vs编译生成即可
在这里插入图片描述

8、 最终运行效果
在这里插入图片描述

点击调用dll
在这里插入图片描述

点击dll自带按钮pushbutton
在这里插入图片描述

三、 好了,以上就是关于QT自带界面的dll输出与调用示例工程,有更好建议欢迎留言交流

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT界面工程导出成dll并在其他界面工程调用示例 的相关文章

  • 从 QML 实例化 C++ 对象会产生巨大的内存使用开销

    实例化一个QObjectC 堆中的派生类为每个对象提供了大约 160 个字节 通过注册相同的对象qmlRegisterType 用于从 QML 创建并通过以下方式动态创建对象createObject 每个对象给我 2000 多个字节 这是完
  • 仅将非模态 QDialog 窗口放置在我的应用程序顶部,而不是所有应用程序顶部

    我有一个 QDialog 窗口 它应该始终位于我的应用程序顶部 它不是模态的 用户可以随时与对话框和主应用程序进行交互 使用窗口保持在顶部提示在某种程度上实现了这一点 但是 该对话框仍然位于所有其他正在运行的应用程序 例如记事本 chrom
  • Qt程序部署到多平台,如何?

    我是 Qt 编程新手 我想开发一个程序 我想在 Windows Linux ubuntu 和 Mac 上运行 听说Qt支持多平台应用程序开发 但我的问题是 在我部署或编译后 任何 Qt 库都需要在 Ubuntu 中运行这个应用程序吗 如果您
  • 有没有办法在没有 QApplication::exec() 的情况下使用 Qt?

    有没有一种安全的方法可以在不调用 QApplication exec 的情况下使用 Qt 我有许多不同的对象正在对多个资源执行长期进程 至少其中一个正在与 Web 应用程序服务器进行通信 我正在制作一个 GUI 应用程序 提示用户在正确的时
  • 如何安全地将对象(尤其是 STL 对象)传入和传出 DLL?

    如何将类对象 尤其是 STL 对象 传入和传出 C DLL 我的应用程序必须以 DLL 文件的形式与第三方插件交互 并且我无法控制这些插件是使用什么编译器构建的 我知道 STL 对象没有保证的 ABI 并且我担心这会导致我的应用程序不稳定
  • QTcpSocket 有时不发送数据

    我有两个 QT 应用程序 一个应用程序可以被认为保存了大数据 它每秒向第二个应用程序发送大约 10 KB 的数据块 之前我尝试使用QUdpSocket来传输数据 但由于MTU限制在2 5K左右 并且需要自己分割和重新组合数据 所以我改用QT
  • 禁用 QML Slider 的鼠标滚轮

    我希望能够滚动Flickable使用鼠标滚轮 或触摸板上的两根手指 不改变Sliders它可能包含 示例代码及结果应用 import QtQuick 2 7 import QtQuick Window 2 2 import QtQuick
  • SidBySide:3rd Party Dll 指的是 MSVCR80.DLL 的两个版本

    我们包含了一个 3rd Party lib DLL 最近在安装时造成了很多麻烦 使用依赖步行者 http www dependencywalker com 我们发现dll本身引用了两个不同版本的 MSVCR80 DLL Version 8
  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • Visual Studio 2012 本机 C++ DLL x86 编译

    我最近将我的工具集从 Win 7 x86 Visual Studio 2010 升级到 Win 8 x64 Visual Studio 2012 但是 现在我的本机 C dll 编译为 x64 而不是 x86 除了将代码移至新操作系统并将其
  • Qt:测量事件处理时间

    我想测量我的应用程序中的哪些事件在主线程中需要很长时间才能执行 阻塞 GUI 或者至少是否有任何事件花费的时间超过 比如说 10 毫秒 显然 我对需要很长时间的任务使用线程和并发 但有时很难在其他线程中放入的内容和可以保留在 GUI 中的内
  • 在 C# 中使用“C”dll [重复]

    这个问题在这里已经有答案了 可能的重复 如何从 C ASP NET 网页调用非托管 C C 代码 https stackoverflow com questions 720004 how do i call unmanaged c c co
  • PyQt5:如何使QThread返回数据到主线程

    I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr
  • Qt 插槽是否与其他代码并行运行?

    在此函数示例中 void MyClass myFunction emit MySignal1 emit MySignal2 如果我有slot1倾听MySignal1 and slot2倾听MySignal2 1 Is slot1总是会在之前
  • Qt:如何连接到 SQLite?

    我安装了 SQLite3 解压到 c sqlite 创建了一个数据库 c sqlite mzsales 现在我试图在 QTableView 中显示其内容 QSqlDatabase db QSqlDatabase addDatabase QS
  • 将 gnuplot 嵌入现有 QtWidget 中

    我正在用 C 创建一个 伪 实时绘图应用程序 使用 gnuplot 作为绘图后端 我的要求之一是绘图必须位于现有窗口内 而不是有一个单独的绘图窗口 gnuplot 默认为 Gnuplot 有一个选项可以指定 Qt 小部件 ID 这似乎适合我
  • Qml 模块未找到 CPP 类注册与新的 QML_ELEMENT r

    我尝试使用 Qt5 15 0 和新宏 QML ELEMENT 在 QML 中注册我的自定义 CPP 类 但找不到该模块 Qt Creater 帮助文件描述了 QML ELEMENT 的步骤 我也检查了 Qt 手册 但没有幸福的结局 http
  • C# 中 DLL 和命名空间的关系

    这里有一个高级问题 今天我花了很多时间自学基本的高级概念 例如 API 静态和动态库 DLL 以及 C 中的编组 获得所有这些知识让我想到了一个看起来非常基本的问题 并且可能表明我对这些概念的理解存在漏洞 我知道的 DLL 可能包含类 这些
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons

随机推荐

  • 数学知识整理:二重积分

    1 二重积分的性质 1 1 f x y 在有界闭区域上可积的充分条件 必要条件 在有界闭区域D上可积的函数f x y 必然是D上的有界函数 有界闭区域D上的连续函数或者分片连续函数f x y 在D上可积 1 2 线性性质 1 3 积分区域可
  • TCP/IP详解 卷1:协议 学习笔记 第十章 动态选路协议

    静态选路包括在配置接口时 以默认方式生成路由表项 对于直连路由 直连路由是由链路层协议发现的 一般指去往路由器的接口地址所在网段的路径 通过route命令增加表项 通常通过系统自引导程序文件 或通过ICMP重定向生成路由表项 通常在默认方式
  • 代理简介

    1 正向代理 正向代理类似一个跳板机 代理访问外部资源 比如我是一个用户 我访问不了某网站 但是我能访问一个代理服务器 这个代理服务器呢 他能访问那个我不能访问的网站 于是我先连上代理服务器 告诉他我需要那个无法访问网站的内容 代理服务器去
  • eclipse开发burpsuite插件

    安装相关软件 eclipse jee 2019 06 R win32 x86 64 zip burpsuite community edition v1 7 32 burpsuite 插件helloworld demo 下载链接在文章末尾
  • PyQt5之信号与信号槽

    一 信号与信号槽特点 PyQt的窗口控件类中有很多内置信号 开发者也可以添加自定义信号 信号与槽具有如下特点 一个信号可以连接多个槽 一个信号可以连接另一个信号 信号参数可以是任何Python类型 一个槽可以监听多个信号 信号与槽的连接方式
  • 定时删除centos服务器日志

    现在java程序的日志一般是使用log4j slf4j 来打日志 并且一般都喜欢用DailyRollingFileAppender模式 就是每天产生一个日志 还有一种是 RollingFileAppender模式 这个模式是按文件大小来保存
  • QT 实现五子棋

    1 程序简介 五子棋是一款大家都熟系的小游戏 这里给大家一步一步的详细介绍如何用QT开发这个游戏 并通过这款游戏的开发练习 进一步熟系 qvector qpoint qpainter QMouseEvent 产生工具栏等的用法和方法 2 程
  • 小学生报编程机器人有什么益处

    小学生报编程机器人有什么益处 小孩子的学习一直都是很多家长们非常关心和重视的一件事情 很多的家长在培养孩子的学习方面也可以说是相当的耐心的 就拿现在很多的家长想要孩子去学习机器人编程的课程来说 有的家长对于孩子学习机器人编程的好处并不是很清
  • 信号集(未决信号集,阻塞信号集)

    未决信号集和阻塞信号集的关系 阻塞信号集是当前进程要阻塞的信号的集合 未决信号集是当前进程中还处于未决状态的信号的集合 这两个集合存储在内核的PCB中 下面以SIGINT为例说明信号未决信号集和阻塞信号集的关系 当进程收到一个SIGINT信
  • 《从零开始编写一个直播服务器》 C++ 实现一个最简单的RTSP流媒体服务器

    流媒体开发系列文章 文章目录 流媒体开发系列文章 前言 一 rtsp流是什么 二 使用步骤 1 服务器代码 总结 前言 在安防行业中 onvif协议与gb协议是两种标准 gb是国内安防行业的标准 onvif是国外的安防行业的标准 其中gb2
  • 【华为OD机试】数字游戏【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 小明玩一个游戏 系统发1 n张牌 每张牌上有一个整数 第一张给小明 后n张按照发牌顺序排成连续的一行 需要小明判断 后n张牌中 是否存在连续的若干张牌 其和可以整除小
  • Heroku 部署有关 opencv 的 Django 后端应用(pdf2docx)

    文章目录 场景 解决方案 Aptfile Buildpacks Dashboard 上手动构建 Heroku CLI 终端构建 Requirements txt 提交改变 场景 我使用 heroku 部署了一个 Django 后端项目 里面
  • C/C++内存布局

    下图是c c 的进程的内存分布布局图 搞清楚内存布局对于理解一个程序是非常重要的 一个程序运行起来 操作系统会给每个进程分配一个 4G 的程序地址空间 当然这都是虚拟地址空间 因为如果一个进程分 4G 的内存 那么就算有再多的内存也不够分
  • windows下的另一个辅助工具Devcon.exe(用会了绝对是神器)

    Device Console Help devcon exe r m
  • Unity3D关于iTween回调函数

    ITween一共三个回调函数 onstart onupdate和oncomplete 顾名思义可以从名字中看出来 常用到最后一个 要是我以后项目中用到了前两个函数 我会把例子添加上 关于oncomplete 就是在itween移动完成以后所
  • Spring Data Jpa

    spring data介绍 Spring Data s mission is to provide a familiar and consistent Spring based programming model for data acce
  • 单元测试、集成测试、系统测试

  • 串口通信——发送和接收数据(8位和16位数据之间的转换)

    1 实验目的 1 发送两个字节数据 就是16位的数据 每一次发送8位 发送两次 这里要进行数据的拆分 如发送一个0XFF56 接收得到的也是FF56 16进制显示 2 接收两个字节的数据 这里通过串口助手以16进制发送一个数据 将拼接的数据
  • winMain函数

    WinMain函数 int WINAPI WinMain HINSTANCE hInstance HINSTANCE hPrevInstance LPSTR lpCmdLine int nShowCmd 函数名 WinMain 返回值 in
  • QT界面工程导出成dll并在其他界面工程调用示例

    一 首先是生成dll 1 新建一个qt工程 2 在 pro文件做如下修改 TARGET qtdll TEMPLATE app DEFINES dllMainWindow LIBRARY TEMPLATE lib 其中qtdll 是自己dll