使用启动外部进程的方式解决there should be only one application object(使用qtwinmigrate中常出现)
目录
背景
解决问题
背景
有点时候,在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中常出现)相关推荐
- qt命令行程序启动外部进程_QT之程序打包发布
1.引言 QT开发完之后,如果直接把exe文件发给别人,是没法直接用的,因为会提示缺少很多库,一种方法是把这些库拷贝出来,一起发过去,但是这样不方便且文件很大,所以需要一种文件打包发布的方法. 2.环 ...
- android无法启动守护进程,Android Studio无法启动守护进程异常怎么解决?
大家好,我的这篇文章来自于我个人做的小项目是关于教你如何能过三关,斩五将的通过驾考,那么废话不多说下面是本人总结的错误集,本来仅供自己不要忘记,但如果觉得本人处理不好或没效果还是能够帮我提提意见,因为 ...
- Node学习七 —— 创建和控制外部进程
创建和控制外部进程 Node是被设计用来高效处理/O操作的,但正如你所见,某些类型的程序并不适用于这种模式.比如当用Node处理一个CPU密集型任务时可能会阻塞事件循环,所以应该将CPU密集任务分配给 ...
- 【学习笔记】启动Nginx、查看nginx进程、查看nginx服务主进程的方式、Nginx服务可接受的信号、nginx帮助命令、Nginx平滑重启、Nginx服务器的升级
1.启动nginx的方式: cd /usr/local/nginx ls ./nginx -c nginx.conf 2.查看nginx的进程方式: [root@localhost nginx] ...
- Python 多进程笔记 — 启动进程的方式、守护进程、进程间通信、进程池、进程池之间通信、多进程生产消费模型
1 面向过程启动多进程 Python 操作进程的类都定义在 multiprocessing 模块,该模块提供了一个 Process 类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另 ...
- 无法启动MYSQL服务”1067 进程意外终止”解决的方法
无法启动MYSQL服务"1067 进程意外终止"解决的方法 参考文章: (1)无法启动MYSQL服务"1067 进程意外终止"解决的方法 (2)https:// ...
- 简述进程的启动、终止的方式以及如何进行进程的查看。
简述进程的启动.终止的方式以及如何进行进程的查看. 参考答案: (1)在Linux中启动一个进程有手工启动和调度启动两种方式: (1)手工启动 用户在输入端发出命令,直接启动一个进程的启动方式.可以分 ...
- springboot项目中的注解 启动项目的方式 解决spring的bean.xml配置不生效 spring的基础JDBC配置
依赖 创建一个 Spring Boot 工程时,可以继承自一个 spring-boot-starter-parent ,也可以不继承 先来看 parent 的基本功能有哪些? 定义了 Java 编译版 ...
- 如何启动java服务以进程的方式启动
1.如何启动java服务以进程的方式启动 在服务目录下(jar包目录下(服务名以transfer为例)),执行如下命令启动服务. nohup java -jar transfer.jar & ...
最新文章
- 普博去该知名城市,直接先赠送80㎡公寓,每月生活补贴5000,最高100万项目经费!...
- [Flutter] Android沉侵式标题栏顶部叠加层去除
- 成功解决ValueError: cannot convert float NaN to integer
- 短时傅里叶分析:spectrogram函数
- linux c截断文件
- visual studio code怎么改成中文?Visual Studio Code Insiders for Mac中文修复版
- 开发问题---数据库字段前出现“—”(保存留用,仅供参考)
- 洛谷P2134 百日旅行
- css 平行四边形 梯形 组合_微课|人教版五年级数学上册6.4组合图形的面积(P99)...
- Hadoop日记Day13---使用hadoop自定义类型处理手机上网日志
- Android gdb 调试
- Oracle查询锁表
- JAVA根据时间增加1天
- 这个是没事的时候做出来看的一系列算数表
- 手机上最简单的计算机,怎么把手机文件传到电脑,才最简单又快速?
- 不只卖电脑的联想,还有什么“新看点”?
- 你应该了解真相_世界首次了解核风险的真相
- docker bind source path does not exist: /etc/timezone“
- 使用Godaddy续费我的域名时遇到支付问题
- 1265:最长公共子序列
热门文章
- [转] PHP 转义与反转义函数
- SSIS 错误代码 DTS_E_OLEDB_EXCEL_NOT_SUPPORTED 没有可用的 OLE DB 访问接口 SSIS 的 64 位版本中不支持 Excel 连接管理器...
- 240多个jquery插件
- 互联网公司各种“花式”裁员,套路特别深,作为程序员你知道吗?
- 面试问“请介绍下自己”,应聘者就回了两点,立马勾起HR的兴趣!
- 程序员的大学|彪悍的人生可以没有妹,但必须要有技术!
- D5SJ醴陵 2013最新版
- OpenEIM 从天上飘落下来
- adsl 路由器默认密码
- 想都不敢想!这8个神奇“黑科技”原来已经有人弄出来了