• 6122阅读
  • 8回复

怎么判断Qt程序/库中是否已经有QApplication事件循环? [复制链接]

上一主题 下一主题
离线shixingya
 

只看楼主 倒序阅读 楼主  发表于: 2016-04-22
怎么判断Qt程序/库中是否已经有QApplication事件循环?
   我现在用QPluginLoader 加载了一个Qt写的界面库 treeview.so , 这个库在C++、Qt工程中都会调用;
因为界面绘制必须有QApplication, 但是怎么判断宿主程序中是否已经有个QApplication的实例?
本人2008年9月至2012年6月在三亚学院学习计算机科学与技术专业四年,2012年6月毕业后至今一直在北京市从事软件开发相关工作。本人的技术栈是C++、熟悉Qt、CEF框架。参与或负责过多款Windows、Linux环境下桌面软件的研发。
参加工作十年来,使用Qt参与开发过一个军工仿真想定建模工具,仿真陆、海、空潜等各兵种的作战平台(包括地面车辆、水面舰艇、固定翼/旋转翼飞机、潜艇等)的运动方式和工作流程,实现陆、海、空、潜立体化协同作战仿真。在国美调研过电商OA办公工具的开发设计、在广联达参与了BIM软件的协作开发、在书生电子独立负责过OFD版式阅读器客户端的开发、在跟谁学使用Qt WebEngine、QGraphics等主导了练习批改工具的开发,在蓝湖基于WebAssembly对标Figma参与开发了一款原型设计工具mastergo,在小米集团技术委员会承担了平台应用研发工作,目前在凌云光从事视觉相关应用平台开发。十多年的软件开发工作,让我在软件工程、程序设计、系统架构方面积累了丰富且宝贵的经验。
有同行的朋友,可以加我微信,一起进步
我叫史星亚 微信: EagleAndy  
加好友时请备注  来自qtcn
我有个Qt交友群,拉您入群
非工作时间 可以电联 18610042411
*********************************************************
另低价出售
→各种软件小程序定制!
→SAP教程,涵盖BI/SD/FICO/HANA等各种模块视频教程,购买教程,拾取金领顾问教程!
→各种考证考研题库,保证考证考研成功上岸!
→抖音快手微博朋友圈各种点赞支持,最快一分钟上万赞!
→挂机打卡,远程叫醒,等各种服务欢迎私信EagleAndy开启!
转发此内容,私信EagleAndy,有定制盲盒寄送!
离线shixingya

只看该作者 1楼 发表于: 2016-04-22
在同一个程序中
main.cpp

void createApplication()
{
    int argc=1;
    char **argv=NULL;
    QApplication a(argc, argv);
    QDialog _dlg;
    _dlg.show();
    a.exec();
    
    return;
}

int main(int argc, char *argv[])
{
    for (int iApp =0; iApp<10; iApp++)
    {
        createApplication();
        qDebug()<<"Qt I Love YOU !";
    }
    return 0;
}

这么写是没有问题的


但是问题来了

int main(int argc, char *argv[])
{

    QApplication a(argc, argv);
    QDialog _dlg;
    _dlg.show();
    a.exec();


    qDebug()<<"Qt I Love YOU !";


    int argc2=1;
    char **argv2=NULL;
    QApplication a2(argc2, argv2);
    QDialog _dlg2;
    _dlg2.show();
    a2.exec();
    qDebug()<<"Qt I Love YOU !";

    return 0;
}
这样是有问题的 报错信息:
ASSERT failure in QCoreApplication: "there should be only one application object", file kernel\qcoreapplication.cpp, line 753


本人2008年9月至2012年6月在三亚学院学习计算机科学与技术专业四年,2012年6月毕业后至今一直在北京市从事软件开发相关工作。本人的技术栈是C++、熟悉Qt、CEF框架。参与或负责过多款Windows、Linux环境下桌面软件的研发。
参加工作十年来,使用Qt参与开发过一个军工仿真想定建模工具,仿真陆、海、空潜等各兵种的作战平台(包括地面车辆、水面舰艇、固定翼/旋转翼飞机、潜艇等)的运动方式和工作流程,实现陆、海、空、潜立体化协同作战仿真。在国美调研过电商OA办公工具的开发设计、在广联达参与了BIM软件的协作开发、在书生电子独立负责过OFD版式阅读器客户端的开发、在跟谁学使用Qt WebEngine、QGraphics等主导了练习批改工具的开发,在蓝湖基于WebAssembly对标Figma参与开发了一款原型设计工具mastergo,在小米集团技术委员会承担了平台应用研发工作,目前在凌云光从事视觉相关应用平台开发。十多年的软件开发工作,让我在软件工程、程序设计、系统架构方面积累了丰富且宝贵的经验。
有同行的朋友,可以加我微信,一起进步
我叫史星亚 微信: EagleAndy  
加好友时请备注  来自qtcn
我有个Qt交友群,拉您入群
非工作时间 可以电联 18610042411
*********************************************************
另低价出售
→各种软件小程序定制!
→SAP教程,涵盖BI/SD/FICO/HANA等各种模块视频教程,购买教程,拾取金领顾问教程!
→各种考证考研题库,保证考证考研成功上岸!
→抖音快手微博朋友圈各种点赞支持,最快一分钟上万赞!
→挂机打卡,远程叫醒,等各种服务欢迎私信EagleAndy开启!
转发此内容,私信EagleAndy,有定制盲盒寄送!
离线shixingya

只看该作者 2楼 发表于: 2016-04-22
有个Qt写的UI库  可以供MFC、C++、Jni调用
如果是C++程序 可以把QApplication写在库里头实现
但是如果是Qt程序调用这个UI库 Qt程序中已经有了QApplication
该怎么判断
本人2008年9月至2012年6月在三亚学院学习计算机科学与技术专业四年,2012年6月毕业后至今一直在北京市从事软件开发相关工作。本人的技术栈是C++、熟悉Qt、CEF框架。参与或负责过多款Windows、Linux环境下桌面软件的研发。
参加工作十年来,使用Qt参与开发过一个军工仿真想定建模工具,仿真陆、海、空潜等各兵种的作战平台(包括地面车辆、水面舰艇、固定翼/旋转翼飞机、潜艇等)的运动方式和工作流程,实现陆、海、空、潜立体化协同作战仿真。在国美调研过电商OA办公工具的开发设计、在广联达参与了BIM软件的协作开发、在书生电子独立负责过OFD版式阅读器客户端的开发、在跟谁学使用Qt WebEngine、QGraphics等主导了练习批改工具的开发,在蓝湖基于WebAssembly对标Figma参与开发了一款原型设计工具mastergo,在小米集团技术委员会承担了平台应用研发工作,目前在凌云光从事视觉相关应用平台开发。十多年的软件开发工作,让我在软件工程、程序设计、系统架构方面积累了丰富且宝贵的经验。
有同行的朋友,可以加我微信,一起进步
我叫史星亚 微信: EagleAndy  
加好友时请备注  来自qtcn
我有个Qt交友群,拉您入群
非工作时间 可以电联 18610042411
*********************************************************
另低价出售
→各种软件小程序定制!
→SAP教程,涵盖BI/SD/FICO/HANA等各种模块视频教程,购买教程,拾取金领顾问教程!
→各种考证考研题库,保证考证考研成功上岸!
→抖音快手微博朋友圈各种点赞支持,最快一分钟上万赞!
→挂机打卡,远程叫醒,等各种服务欢迎私信EagleAndy开启!
转发此内容,私信EagleAndy,有定制盲盒寄送!
离线shixingya

只看该作者 3楼 发表于: 2016-04-22


业务逻辑比较复杂 但是要解决的问题 就是这个
如果已经启用了一个QApplication 再启用另外一个 该怎么处理

本人2008年9月至2012年6月在三亚学院学习计算机科学与技术专业四年,2012年6月毕业后至今一直在北京市从事软件开发相关工作。本人的技术栈是C++、熟悉Qt、CEF框架。参与或负责过多款Windows、Linux环境下桌面软件的研发。
参加工作十年来,使用Qt参与开发过一个军工仿真想定建模工具,仿真陆、海、空潜等各兵种的作战平台(包括地面车辆、水面舰艇、固定翼/旋转翼飞机、潜艇等)的运动方式和工作流程,实现陆、海、空、潜立体化协同作战仿真。在国美调研过电商OA办公工具的开发设计、在广联达参与了BIM软件的协作开发、在书生电子独立负责过OFD版式阅读器客户端的开发、在跟谁学使用Qt WebEngine、QGraphics等主导了练习批改工具的开发,在蓝湖基于WebAssembly对标Figma参与开发了一款原型设计工具mastergo,在小米集团技术委员会承担了平台应用研发工作,目前在凌云光从事视觉相关应用平台开发。十多年的软件开发工作,让我在软件工程、程序设计、系统架构方面积累了丰富且宝贵的经验。
有同行的朋友,可以加我微信,一起进步
我叫史星亚 微信: EagleAndy  
加好友时请备注  来自qtcn
我有个Qt交友群,拉您入群
非工作时间 可以电联 18610042411
*********************************************************
另低价出售
→各种软件小程序定制!
→SAP教程,涵盖BI/SD/FICO/HANA等各种模块视频教程,购买教程,拾取金领顾问教程!
→各种考证考研题库,保证考证考研成功上岸!
→抖音快手微博朋友圈各种点赞支持,最快一分钟上万赞!
→挂机打卡,远程叫醒,等各种服务欢迎私信EagleAndy开启!
转发此内容,私信EagleAndy,有定制盲盒寄送!
离线jxgyzhang

只看该作者 4楼 发表于: 2016-04-22
觉得你问的问题好奇怪,从代码的角度其实你可以new QApplication(),在不用的时候delete掉前一个,再new 一个新的,不知道能不能解决你的问题
离线shixingya

只看该作者 5楼 发表于: 2016-04-22
回 jxgyzhang 的帖子
jxgyzhang:
觉得你问的问题好奇怪,从代码的角度其实你可以new QApplication(),在不用的时候delete掉前一个,再new 一个新的,不知道能不能解决你的问题

[attachment=15044]

这样的描述,不知道你可否明白我的疑问点


业务逻辑比较复杂 但是要解决的问题 就是这个
如果已经启用了一个QApplication 再启用另外一个 该怎么处理


本人2008年9月至2012年6月在三亚学院学习计算机科学与技术专业四年,2012年6月毕业后至今一直在北京市从事软件开发相关工作。本人的技术栈是C++、熟悉Qt、CEF框架。参与或负责过多款Windows、Linux环境下桌面软件的研发。
参加工作十年来,使用Qt参与开发过一个军工仿真想定建模工具,仿真陆、海、空潜等各兵种的作战平台(包括地面车辆、水面舰艇、固定翼/旋转翼飞机、潜艇等)的运动方式和工作流程,实现陆、海、空、潜立体化协同作战仿真。在国美调研过电商OA办公工具的开发设计、在广联达参与了BIM软件的协作开发、在书生电子独立负责过OFD版式阅读器客户端的开发、在跟谁学使用Qt WebEngine、QGraphics等主导了练习批改工具的开发,在蓝湖基于WebAssembly对标Figma参与开发了一款原型设计工具mastergo,在小米集团技术委员会承担了平台应用研发工作,目前在凌云光从事视觉相关应用平台开发。十多年的软件开发工作,让我在软件工程、程序设计、系统架构方面积累了丰富且宝贵的经验。
有同行的朋友,可以加我微信,一起进步
我叫史星亚 微信: EagleAndy  
加好友时请备注  来自qtcn
我有个Qt交友群,拉您入群
非工作时间 可以电联 18610042411
*********************************************************
另低价出售
→各种软件小程序定制!
→SAP教程,涵盖BI/SD/FICO/HANA等各种模块视频教程,购买教程,拾取金领顾问教程!
→各种考证考研题库,保证考证考研成功上岸!
→抖音快手微博朋友圈各种点赞支持,最快一分钟上万赞!
→挂机打卡,远程叫醒,等各种服务欢迎私信EagleAndy开启!
转发此内容,私信EagleAndy,有定制盲盒寄送!
离线stlcours

只看该作者 6楼 发表于: 2016-04-22
回 shixingya 的帖子
shixingya:有个Qt写的UI库  可以供MFC、C++、Jni调用
如果是C++程序 可以把QApplication写在库里头实现
但是如果是Qt程序调用这个UI库 Qt程序中已经有了QApplication
该怎么判断 (2016-04-22 14:52) 

对接。比如QT写的DLL里已经有一个Application。那么在你的主程序里写上:
dll.Application = this.application;
这样就废弃了dll里原来的application实例,却又能用上真正的application。

话说,楼主对Windows消息机制没有认真研究过,才会有这样的问题。
离线shixingya

只看该作者 7楼 发表于: 2016-04-25
回 stlcours 的帖子
stlcours:对接。比如QT写的DLL里已经有一个Application。那么在你的主程序里写上:
dll.Application = this.application;
这样就废弃了dll里原来的application实例,却又能用上真正的application。
....... (2016-04-22 21:03) 

亲 您可能没有理解我的疑问点

首先,主程序中不一定有QApplication 【主程序可能是存C++工程,没有QAppication实例】
case01 :如果主程序中没有QApplication,那么在界面库里初始化一个QApplication实例,程序运行正确
case02 :如果主程序中存在QApplication,那么在界面库再初始化一个QApplication出错。
本人2008年9月至2012年6月在三亚学院学习计算机科学与技术专业四年,2012年6月毕业后至今一直在北京市从事软件开发相关工作。本人的技术栈是C++、熟悉Qt、CEF框架。参与或负责过多款Windows、Linux环境下桌面软件的研发。
参加工作十年来,使用Qt参与开发过一个军工仿真想定建模工具,仿真陆、海、空潜等各兵种的作战平台(包括地面车辆、水面舰艇、固定翼/旋转翼飞机、潜艇等)的运动方式和工作流程,实现陆、海、空、潜立体化协同作战仿真。在国美调研过电商OA办公工具的开发设计、在广联达参与了BIM软件的协作开发、在书生电子独立负责过OFD版式阅读器客户端的开发、在跟谁学使用Qt WebEngine、QGraphics等主导了练习批改工具的开发,在蓝湖基于WebAssembly对标Figma参与开发了一款原型设计工具mastergo,在小米集团技术委员会承担了平台应用研发工作,目前在凌云光从事视觉相关应用平台开发。十多年的软件开发工作,让我在软件工程、程序设计、系统架构方面积累了丰富且宝贵的经验。
有同行的朋友,可以加我微信,一起进步
我叫史星亚 微信: EagleAndy  
加好友时请备注  来自qtcn
我有个Qt交友群,拉您入群
非工作时间 可以电联 18610042411
*********************************************************
另低价出售
→各种软件小程序定制!
→SAP教程,涵盖BI/SD/FICO/HANA等各种模块视频教程,购买教程,拾取金领顾问教程!
→各种考证考研题库,保证考证考研成功上岸!
→抖音快手微博朋友圈各种点赞支持,最快一分钟上万赞!
→挂机打卡,远程叫醒,等各种服务欢迎私信EagleAndy开启!
转发此内容,私信EagleAndy,有定制盲盒寄送!
离线dbzhang800

只看该作者 8楼 发表于: 2016-04-25
回 shixingya 的帖子
shixingya:亲 您可能没有理解我的疑问点
首先,主程序中不一定有QApplication 【主程序可能是存C++工程,没有QAppication实例】
case01 :如果主程序中没有QApplication,那么在界面库里初始化一个QApplication实例,程序运行正确
....... (2016-04-25 10:17) 

[static] QCoreApplication *QCoreApplication::instance()

Returns a pointer to the application's QCoreApplication (or QApplication) instance.
If no instance has been allocated, null is returned.
4条评分好评度+1贡献值+1金钱+1威望+1
shixingya 好评度 +1 - 2016-04-25
shixingya 贡献值 +1 - 2016-04-25
shixingya 威望 +1 - 2016-04-25
shixingya 金钱 +1 - 2016-04-25
快速回复
限100 字节
 
上一个 下一个