• 8437阅读
  • 4回复

如何才能不使用Qt原有的application.exec()模式,并达到同样功能[已解决] [复制链接]

上一主题 下一主题
离线kingyen
 

只看楼主 正序阅读 楼主  发表于: 2010-03-30
大家都知道,Qt的运行主要使用如下方式:
int main()
{
    QApplication a;
         QWidget        form;
         form.show();
         return a.exec();
}

这样的话循环体必须归Qt管,没法适应一些特殊的场合(比如,我想将Qt嵌入其他程序的消息循环)。
使用如下方法可以暂时解决问题,程序貌似可以正常运作:
void MyUpdateFunction(){} //这是我希望能独立调用的函数,无Qt无关。
int main()
{
        QApplication a;
         QWidget        form;
         form.show();
         while( 1 )
         {
             MyUpdateFunction();
             a.processEvents();          //更新Qt消息事件的处理
    }
         return 0;
}

但问题来了,当窗口关闭时,我如何捕获窗口的关闭事件来退出这个While循环呢?QApplication类好像未提供这样的成员函数。
[ 此帖被kingyen在2010-04-02 15:38重新编辑 ]
离线溟阡
只看该作者 4楼 发表于: 2010-06-22
我也这么用的,可是在用了processEvents()之后CPU的占用总是在100%,这个要怎么解决呢?
离线benbenmajia

只看该作者 3楼 发表于: 2010-03-31
- -,有时候感觉有些稀奇古怪的啊,你的循环中也是可以使用QApplication的函数的啊
安然.....
离线kingyen

只看该作者 2楼 发表于: 2010-03-30
多谢楼上,我想问的问题是如何捕获窗口的关闭事件,如果能够捕获的话,在while里加个判断条件自然能退出循环。
搜了搜帖子,好像重载窗体类的虚函数void closeEvent( QCloseEvent * );可以捕获。问题基本解决。
离线yangfanxing
只看该作者 1楼 发表于: 2010-03-30
        
while( 1 )
         {
             MyUpdateFunction();
             a.processEvents();          //更新Qt消息事件的处理
    }
        
这个得跑多少次才算结啊?没死机?呵呵。。。

抛开这个,把1改成能判断form仍然存在的bool型参数,当form关掉时参数为false,自然不再while了~~~
PHPWind好恶心。。。不想看这种界面。。。
快速回复
限100 字节
 
上一个 下一个