• 13729阅读
  • 4回复

Qt中对话框或QMainWindow一闪而过(已解决) [复制链接]

上一主题 下一主题
离线hgamesale
 
只看楼主 倒序阅读 楼主  发表于: 2010-04-25
新手提问,
Qt中生成好主窗口后然后通过按钮或者菜单调用新的对话框或再生成新的QMainWindow调用
QMainWindow.show()新的主窗口一闪而过就没了,这是什么原因呢

不吝赐教
在线等,谢谢


自已解决了
[ 此帖被hgamesale在2010-04-25 23:10重新编辑 ]
离线rqzrqh

只看该作者 1楼 发表于: 2010-04-27
必须鄙视楼主,自己解决了又不给出解决方法。

因为用的是局部变量,或者没有有调用exec循环。
离线hgamesale
只看该作者 2楼 发表于: 2010-04-27
来吧,鄙视我吧,既然说了,我说说原因,
因为新手,不清楚Qt是怎么处理窗口或者QWidget的show和exec()函数的,看文档上说show是显示出这个QWidget和它的子类,exec()是对于对话框来说,显示一个模态对话框,如果对话框是一个application model那么在关闭这个对话框这前,不同对本程序的任何其它窗口交互,如果对话框是一个window model,它只是阻塞对它父窗口的交互,

不是因为局部变量的问题,如果程序中已经有一个QMainWindow后,想再显示一个QMainWindow呢,它没有exec,这时新建的QMainWindow必须对动态分配内存的方法声明,new QMainWindow然后再调用它的show方法就可以了,
个人认为可以是内存分配的问题,主窗口(程序的第一个窗口,可以分配在堆上,也可以分配在堆栈上),但后来的窗口(包括对话框,必须分配在堆上(对于show()方法来说))

如果对话框是调用的exec()方法,刚可以在堆堆栈上创建
离线抠涕
只看该作者 3楼 发表于: 2010-04-27
严格来说确实不是因为局部变量的原因,
是因为局部变量分配在了栈上的原因。。。

你如果把N个QMainWindow放在一个类里,当成员变量,
可以都丢在栈上。随便你什么时候show。
不见得只有一个可以放在栈上。
离线babybluema

只看该作者 4楼 发表于: 2010-05-10
如何让一个QMainWindow模态显示呢。
快速回复
限100 字节
 
上一个 下一个