• 9074阅读
  • 2回复

[提问]简单的QDialog关闭问题 [复制链接]

上一主题 下一主题
离线fh2002
 

只看楼主 正序阅读 楼主  发表于: 2011-12-31
有1个主对话框mainDialg,上面有2个按钮,一个是“全部开始”,一个是“全部结束
全部开始”负责开启10个线程,每个线程会往每个游戏中注入一个dll.
全部结束”负责关闭所有线程,关闭前完成自己的清理工作,比如卸载dll。(是通过信号与槽实现的 emit quitGame();)
这2个按钮的功能都已经实现。




现在的问题是:我点击窗口上的X按钮时的代码
void WaiGuaDialog::closeEvent(QCloseEvent* event){
    emit quitGame();    
    event->accept();
}


这么做之后,每个线程并没有收到信息进行清理工作,而主窗口就退出了。导致没有卸载dll。应该怎么办?
离线fh2002

只看该作者 2楼 发表于: 2011-12-31
嘿嘿,实现了,在main方法中解决的。都不需要closeEvent事件,按ESC才触发rejected.
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForName("gbk"));
    WaiGuaDialog w;
    w.show();
    app.exec();
    w.closeAll();          //里面就一行代码   emit quitGame();
    GameThread::sleep(1);    //必须得延时才行。要不然dialog退出了就没法与通讯。
    return 1;
}
离线roywillow

只看该作者 1楼 发表于: 2011-12-31
我记得QDialog在点叉号退出的时候会发出rejected()信号的,直接用这个信号也可以吧
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
快速回复
限100 字节
 
上一个 下一个