• 10471阅读
  • 7回复

为什么子窗口显示一闪就没? [复制链接]

上一主题 下一主题
离线freedom0203
 

只看楼主 正序阅读 楼主  发表于: 2007-10-10
为什么子窗口显示一闪就没?
— 本帖被 XChinux 执行加亮操作(2007-10-12) —
我用class test : public QWidget,做了一个窗口类。
又用class Form1 : public QMainWindow 做了另一个窗口。定义了一个菜单file->open.

现在我想点击open的时候弹出test类型窗口(若为test  temp(0,0);)。信号和槽已经关联好。出现的问题是:我一点open,新窗口(temp)弹出一闪就没了。

我以为是hide()或者close()了,就重新实现了这2个函数。但是结果显示并不是hide或close了。

我不明白为什么子窗口显示不出来。请高手指点。

open槽函数是:
{
    test  temp(0,0);
    temp.show();
}
离线roywillow

只看该作者 7楼 发表于: 2011-05-13
{
    test temp(this,0);    //this是父窗口(form1)指针
    temp.show();
}
temp执行完show之后立刻就被销毁,神马都木有了……
我的做法是在父对象类中声明一个指针,初始化为0,然后调用槽的时候如果指针为0那就new一个,并且指定parent,如果不是0,就直接显示,因为这个窗口还在内存中
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线lmaxmax

只看该作者 6楼 发表于: 2011-05-13
哎呀。。。这么简单。。
在show()后面加上一句
temp.exec();
OK?
离线yooi
只看该作者 5楼 发表于: 2007-10-15
You must use heap mem for a object, if wanna setup it
在线XChinux

只看该作者 4楼 发表于: 2007-10-12

{
    test temp(this,0);    //this是父窗口(form1)指针
    temp.show();
}

temp是test类型的对象,它的作用域只在这个花括号之内。而show()显示完后,作用域结束,temp对象被销毁,所以闪过后就over了。

三楼所说的是一种解决方法,即把它定义成指针,这样show()完后,指针所指的空间不会被清除掉。但此时,最好能处理好与销毁相关的内容,比如定义setAttribute(WA_DeleteOnClose, true),或者指明parent为某个对象,或者将这个指针记住等等。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线dyq2008
只看该作者 3楼 发表于: 2007-10-12
这样试试:
test *temp = new test(this,0); 
离线mzl626

只看该作者 2楼 发表于: 2007-10-12
把你的主要代码贴出来,这样描述没用的!
离线freedom0203

只看该作者 1楼 发表于: 2007-10-10
我修改了下:
{
    test temp(this,0);    //this是父窗口(form1)指针
    temp.show();
}

子窗口根本不显示了,闪都没了。
快速回复
限100 字节
 
上一个 下一个