目录

背景

解决问题


背景

有点时候,在Windows操作系统下,在dll中使用qtwinmigrate添加了qt界面,然后在MFC或者C#或者其他语言调用的时候不会出现问题,然而再用QtGUI程序去调用时就会出现如下的问题:

解决问题

dll的源码查阅下面这个链接的博文:

使用C++控制台程序或Python调用Dll创建Qt界面(dll中创建主事件循环,qtwinmigrate的使用)

https://blog.csdn.net/qq78442761/article/details/87598078

有问题的源码如下:

twolivetimecycle.h

#ifndef TWOLIVETIMECYCLE_H
#define TWOLIVETIMECYCLE_H#include <QtWidgets/QWidget>
#include "ui_twolivetimecycle.h"class TwoLiveTimeCycle : public QWidget
{Q_OBJECTpublic:TwoLiveTimeCycle(QWidget *parent = 0);~TwoLiveTimeCycle();protected slots:void btnClicked();private:Ui::TwoLiveTimeCycleClass ui;
};#endif // TWOLIVETIMECYCLE_H

main.cpp

#include "twolivetimecycle.h"
#include <QtWidgets/QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);TwoLiveTimeCycle w;w.show();return a.exec();
}

twolivetimecycle.cpp

include "twolivetimecycle.h"
#include <qmessagebox.h>
#include <qdebug.h>#pragma comment(lib, "qtdialog.lib")
extern "C" __declspec(dllexport) void showWidget();TwoLiveTimeCycle::TwoLiveTimeCycle(QWidget *parent): QWidget(parent)
{ui.setupUi(this);connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(btnClicked()));
}TwoLiveTimeCycle::~TwoLiveTimeCycle()
{}void TwoLiveTimeCycle::btnClicked(){showWidget();
}

这里采用启动外部进程的方式去解决!

首先构造一个外部进程的接口(写一个exe程序,这里用控制台表示):

控制台源码如下:

#include <iostream>
using namespace std;#pragma comment(lib, "qtdialog.lib")
extern "C" __declspec(dllexport) void showWidget();int main(int argc, char *argv[]){showWidget();getchar();return 0;
}

此时运行它,可以调出界面,如下图所示:

随后把这个exe的文件放好位置,使用Qt去调用!

运行截图如下:

这样就成功了,不会报错了!

正确源码如下:

twolivetimecycle.h

#ifndef TWOLIVETIMECYCLE_H
#define TWOLIVETIMECYCLE_H#include <QtWidgets/QWidget>
#include "ui_twolivetimecycle.h"class TwoLiveTimeCycle : public QWidget
{Q_OBJECTpublic:TwoLiveTimeCycle(QWidget *parent = 0);~TwoLiveTimeCycle();protected slots:void btnClicked();private:Ui::TwoLiveTimeCycleClass ui;
};#endif // TWOLIVETIMECYCLE_H

main.cpp

#include "twolivetimecycle.h"
#include <QtWidgets/QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);TwoLiveTimeCycle w;w.show();return a.exec();
}

twoivetimecycle.cpp

#include "twolivetimecycle.h"
#include <qmessagebox.h>
#include <qdebug.h>
#include <qprocess.h>#pragma comment(lib, "qtdialog.lib")
extern "C" __declspec(dllexport) void showWidget();TwoLiveTimeCycle::TwoLiveTimeCycle(QWidget *parent): QWidget(parent)
{ui.setupUi(this);connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(btnClicked()));
}TwoLiveTimeCycle::~TwoLiveTimeCycle()
{}void TwoLiveTimeCycle::btnClicked(){QProcess *p = new QProcess(this);p->start("CallQtWidgetDemo.exe");
}

使用启动外部进程的方式解决there should be only one application object(使用qtwinmigrate中常出现)相关推荐

  1. qt命令行程序启动外部进程_QT之程序打包发布

    1.引言 QT开发完之后,如果直接把exe文件发给别人,是没法直接用的,因为会提示缺少很多库,一种方法是把这些库拷贝出来,一起发过去,但是这样不方便且文件很大,所以需要一种文件打包发布的方法. 2.环 ...

  2. android无法启动守护进程,Android Studio无法启动守护进程异常怎么解决?

    大家好,我的这篇文章来自于我个人做的小项目是关于教你如何能过三关,斩五将的通过驾考,那么废话不多说下面是本人总结的错误集,本来仅供自己不要忘记,但如果觉得本人处理不好或没效果还是能够帮我提提意见,因为 ...

  3. Node学习七 —— 创建和控制外部进程

    创建和控制外部进程 Node是被设计用来高效处理/O操作的,但正如你所见,某些类型的程序并不适用于这种模式.比如当用Node处理一个CPU密集型任务时可能会阻塞事件循环,所以应该将CPU密集任务分配给 ...

  4. 【学习笔记】启动Nginx、查看nginx进程、查看nginx服务主进程的方式、Nginx服务可接受的信号、nginx帮助命令、Nginx平滑重启、Nginx服务器的升级

     1.启动nginx的方式: cd /usr/local/nginx ls ./nginx -c nginx.conf 2.查看nginx的进程方式: [root@localhost nginx] ...

  5. Python 多进程笔记 — 启动进程的方式、守护进程、进程间通信、进程池、进程池之间通信、多进程生产消费模型

    1 面向过程启动多进程 Python 操作进程的类都定义在 multiprocessing 模块,该模块提供了一个 Process 类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另 ...

  6. 无法启动MYSQL服务”1067 进程意外终止”解决的方法

    无法启动MYSQL服务"1067 进程意外终止"解决的方法 参考文章: (1)无法启动MYSQL服务"1067 进程意外终止"解决的方法 (2)https:// ...

  7. 简述进程的启动、终止的方式以及如何进行进程的查看。

    简述进程的启动.终止的方式以及如何进行进程的查看. 参考答案: (1)在Linux中启动一个进程有手工启动和调度启动两种方式: (1)手工启动 用户在输入端发出命令,直接启动一个进程的启动方式.可以分 ...

  8. springboot项目中的注解 启动项目的方式 解决spring的bean.xml配置不生效 spring的基础JDBC配置

    依赖 创建一个 Spring Boot 工程时,可以继承自一个 spring-boot-starter-parent ,也可以不继承 先来看 parent 的基本功能有哪些? 定义了 Java 编译版 ...

  9. 如何启动java服务以进程的方式启动

    1.如何启动java服务以进程的方式启动 在服务目录下(jar包目录下(服务名以transfer为例)),执行如下命令启动服务. nohup java -jar transfer.jar & ...

最新文章

  1. 普博去该知名城市,直接先赠送80㎡公寓,每月生活补贴5000,最高100万项目经费!...
  2. [Flutter] Android沉侵式标题栏顶部叠加层去除
  3. 成功解决ValueError: cannot convert float NaN to integer
  4. 短时傅里叶分析:spectrogram函数
  5. linux c截断文件
  6. visual studio code怎么改成中文?Visual Studio Code Insiders for Mac中文修复版
  7. 开发问题---数据库字段前出现“—”(保存留用,仅供参考)
  8. 洛谷P2134 百日旅行
  9. css 平行四边形 梯形 组合_微课|人教版五年级数学上册6.4组合图形的面积(P99)...
  10. Hadoop日记Day13---使用hadoop自定义类型处理手机上网日志
  11. Android gdb 调试
  12. Oracle查询锁表
  13. JAVA根据时间增加1天
  14. 这个是没事的时候做出来看的一系列算数表
  15. 手机上最简单的计算机,怎么把手机文件传到电脑,才最简单又快速?
  16. 不只卖电脑的联想,还有什么“新看点”?
  17. 你应该了解真相_世界首次了解核风险的真相
  18. docker bind source path does not exist: /etc/timezone“
  19. 使用Godaddy续费我的域名时遇到支付问题
  20. 1265:最长公共子序列

热门文章

  1. [转] PHP 转义与反转义函数
  2. SSIS 错误代码 DTS_E_OLEDB_EXCEL_NOT_SUPPORTED 没有可用的 OLE DB 访问接口 SSIS 的 64 位版本中不支持 Excel 连接管理器...
  3. 240多个jquery插件
  4. 互联网公司各种“花式”裁员,套路特别深,作为程序员你知道吗?
  5. 面试问“请介绍下自己”,应聘者就回了两点,立马勾起HR的兴趣!
  6. 程序员的大学|彪悍的人生可以没有妹,但必须要有技术!
  7. D5SJ醴陵 2013最新版
  8. OpenEIM 从天上飘落下来
  9. adsl 路由器默认密码
  10. 想都不敢想!这8个神奇“黑科技”原来已经有人弄出来了