首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

Qt开发中窗口切换有关问题

2012-12-14 
Qt开发中窗口切换问题本帖最后由 yuan8222 于 2012-11-09 17:50:36 编辑各位大侠,首先看下开发环境:在wind

Qt开发中窗口切换问题
本帖最后由 yuan8222 于 2012-11-09 17:50:36 编辑 各位大侠,首先看下开发环境:
    在windows下Qt creator 2.0.1 + Qt 4.7开发,然后开发好之后在Qtopia的环境下编译,最终程序是在一个触摸屏板子上运行的.

我遇到的问题如下:
    这个项目实现的功能很多,然后就需要设计很多个窗口,每个窗口我是用QFrame设计的,然后在主窗口开始之后,可以去任意点击各个功能按钮,然后使得对应功能的窗口弹出来.每次只能有一个窗口弹出来,因为是个触摸屏.部分弹出代码如下:
1:主窗口一个按钮按下去之后,弹出窗口m,m保存主窗口指针:


void mainwindow::on_angiographybutton_clicked() {
    /*创建要弹出的窗口*/
    m = new mulwaitinginject;
    /*隐藏当前的窗口*/
    this->hide();
    /*新窗口把当前的保存起来*/
    m->setMainWindow(this);
    /*新窗口显示*/
    m->show();
}

2:子窗口有个返回按钮,点击之后,返回上层窗口:

void mulwaitinginject::on_multiinjbutton_clicked() {
    /*当前窗口隐藏*/
    this->hide();
    /*保存的顶层窗口弹出*/
    this->getMainWindow()->show();
}


这么做,功能是实现了,但是存在一个很不好的现象,如下图,因工作保密,只贴了任务栏的程序图标闪动,图标闪动也就代表窗口切换了一下:

每次切换窗口,屏幕都会猛的一闪
在电脑上还好,4G内存,但是到开发板上,只有256M的内存,这个闪效果就非常非常明显,切换的时候,Qtopia背景全部绿色,然后才弹出新窗口,这个对用户体验可是非常不好的.

我现在请教如何修改代码或者如何变化下思路可以使得这个效果避免,不用每次都闪来闪去的.
[最优解释]
引用:
是的就像2楼说的 初始化的时候都new好 显示的直接show

闪一下,背景全部绿色  可能就是这个时候去创建它了,要花点时间

初始化的时候都创建好 在需要显示的时候直接show就不再去创建了


就是因为是资源受限设备上。所以就不能像PC那样全部new好。 
这也可能是楼主为啥没有new 了没有设置父亲的原因。因为他用完了手动delete。还需要跑系统呢。哪能全部驻留内存呢。

猜测为什么会有绿色。 
1 创建时间消耗时间多
2 因为每次都是top level widget,每次都需要创建窗口资源。

你可以试试这样做,创建一个永久的QWidget或者dialog。以后你要创建的弹出窗口都用这个为父亲。不用的时候再手动删除你创建的弹出窗口。 

希望能帮到你。



[其他解释]
用QAnimation做成动画效果吧 渐变的缩小和放大 而不是现在的闪来闪去
另外你这个地方是一直在new的? 有泄露哦
m = new mulwaitinginject;
    /*隐藏当前的窗口*/
    this->hide();
    /*新窗口把当前的保存起来*/
    m->setMainWindow(this);
    /*新窗口显示*/
    m->show();

建议初始化的时候 就把所有的Frame都创建了 然后按需显示
[其他解释]
是的就像2楼说的 初始化的时候都new好 显示的直接show

闪一下,背景全部绿色  可能就是这个时候去创建它了,要花点时间

初始化的时候都创建好 在需要显示的时候直接show就不再去创建了
[其他解释]
ok,我创建一个永久的QWidget试试哈,谢谢各位帮助!
引用:
引用:是的就像2楼说的 初始化的时候都new好 显示的直接show

闪一下,背景全部绿色  可能就是这个时候去创建它了,要花点时间

初始化的时候都创建好 在需要显示的时候直接show就不再去创建了

就是因为是资源受限设备上。所以就不能像PC那样全部new好。 
这也可能是楼主为啥没有new 了没有设置父亲的原因。因……

[其他解释]
因为每个窗口可能初始化都需要很多从上个窗口传来的参数,所以感觉这个全部初始化了并不是最好的选择,我窗体很多的,每个窗体弹出都需要上个窗体的参数什么的,我试试全局创建一个QWidget,然后这个QWidget做父类窗口,试试看,谢谢你的帮助!
引用:
用QAnimation做成动画效果吧 渐变的缩小和放大 而不是现在的闪来闪去
另外你这个地方是一直在new的? 有泄露哦
m = new mulwaitinginject;
    /*隐藏当前的窗口*/
    this->hide();
    /*新窗口把当前的保存起来*/
    m->setMainWindow(this);


    /*新窗口显示……

热点排行