• 10255阅读
  • 27回复

[提问]请大家帮忙分析下界面整体ui响应慢的可能原因 [复制链接]

上一主题 下一主题
离线cathy87
 
只看楼主 倒序阅读 楼主  发表于: 2012-06-05
VS2008和QT开发的一个小demo,界面整体相应偏慢。


目前基本情况如下:
  • 使用designer编辑.ui文件;
  • 使用qrc加载图片资源(包含30个左右图片,基本都是图标,共362K);



如垂直splitter连接两个widget,上下拖动时有非常严重的拖尾现象。


请遇到过此类问题的朋友分享一下你们的解决方法和心得。谢谢。



离线jdwx

只看该作者 1楼 发表于: 2012-06-05
回 楼主(cathy87) 的帖子
将编译配置为release,再看看。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线cathy87
只看该作者 2楼 发表于: 2012-06-05
release相对会快一些
离线cathy87
只看该作者 3楼 发表于: 2012-06-05
回 1楼(jdwx) 的帖子
会快些,但还是有拖尾
离线jdwx

只看该作者 4楼 发表于: 2012-06-05
回 3楼(cathy87) 的帖子
只有在两个QWidget里优化了。不过应该不会拖尾,现在的CPU快这呢!
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线cathy87
只看该作者 5楼 发表于: 2012-06-05
回 4楼(jdwx) 的帖子
有一些eventFilter的过滤,不知是不是因为这个。。
离线benbenmajia

只看该作者 6楼 发表于: 2012-06-05
你的widget都是实时new的么?如果是的话试着放到堆上试试
安然.....
离线jdwx

只看该作者 7楼 发表于: 2012-06-05
回 5楼(cathy87) 的帖子
比我的快多了,我这里AMD4000+,都是旧社会的了。
说说你的QWidget做什么用的?
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线cathy87
只看该作者 8楼 发表于: 2012-06-05
回 6楼(benbenmajia) 的帖子
不是,都是在ui里的,不过其中有个饼图 是在切换时候new的
离线cathy87
只看该作者 9楼 发表于: 2012-06-05
回 7楼(jdwx) 的帖子
上面那个里面有几个groupbox,每一个里面有一些图标,
下面的widget有一个table 一个饼图,点击每一个groupbox会更新饼图,饼图是每一次new的
离线jdwx

只看该作者 10楼 发表于: 2012-06-05
回 9楼(cathy87) 的帖子
就这些,看来不会卡。
打开任务管理器,看看拖动分割条的时候,CPU占用率,要是很高的话,看看绘图的部分有没有问题,我有一次没弄好导致循环update,很卡。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线cathy87
只看该作者 11楼 发表于: 2012-06-05
回 10楼(jdwx) 的帖子
除了上下这两个widget还有左边的一个,默认它是隐藏的,当我点击按钮显示时,cpu一下从3%升到26%,再点击隐藏也是如此。。拖动分隔条时达到32%多.。
离线cathy87
只看该作者 12楼 发表于: 2012-06-05
回 11楼(cathy87) 的帖子
现在不考虑画图那部分,光一个widget的显示隐藏怎么就这么高啊。。
离线uidab

只看该作者 13楼 发表于: 2012-06-05
回 12楼(cathy87) 的帖子
有可能是Qt自己的问题,我重载最大化,然后就经常能看见窗口变化的过程。理论上应该是很快就过去,一般人都看不出来的。后来下载了一个别人用Qt做的软件,发现也这样。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线q3310110

只看该作者 14楼 发表于: 2012-06-05
看看自己重绘部分代码吧,还有就是可能你拖动的时候计算量偏大,只是猜测。
Ada.
And smile smile smile.
离线cathy87
只看该作者 15楼 发表于: 2012-06-05
回 13楼(uidab) 的帖子
就是在release下也不是那么流畅,真是个大问题啊。。
离线cathy87
只看该作者 16楼 发表于: 2012-06-05
回 14楼(q3310110) 的帖子
拖动时候其实也只是图的restore吧,现在怀疑是不是用designer设计ui的问题。。因为最基本功能的时候光Ui就占了不少cpu
离线uidab

只看该作者 17楼 发表于: 2012-06-05
回 15楼(cathy87) 的帖子
是的,我看到最大化的效果就是这样。 原来居中的窗口先移动到左上角,然后窗口拉伸成全屏,这个过程太清晰了。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线cathy87
只看该作者 18楼 发表于: 2012-06-05
回 17楼(uidab) 的帖子
我这个最大化 还原倒没问题,就是widget拖动 和显示隐藏 特别卡
离线jdwx

只看该作者 19楼 发表于: 2012-06-05
是以前没注意过,确实挺费CPU的。
就是拖动了分割条。



发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线cathy87
只看该作者 20楼 发表于: 2012-06-06
回 19楼(jdwx) 的帖子
是啊 我就在designer里拖动软件本身的拖动条,CPU一下就能增加20%多,怎么这么可怕
离线jdwx

只看该作者 21楼 发表于: 2012-06-06
看来没啥好办法了。
其实Qt最要命的地方就在这里,模拟每个系统的本地界面,看看QStyle的代码就知道
大量的switch-case,严重影响速度。
和MFC对比,MFC就没有这些,速度很快。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线cathy87
只看该作者 22楼 发表于: 2012-06-06
回 21楼(jdwx) 的帖子
啊。。我本来还想把我画饼图的那部分改一下,看来也没什么意义了。。
我看qt里自带的例子 拖的时候 倒没有延迟。。不知道跟界面里内容比较少有没关系。
离线jdwx

只看该作者 23楼 发表于: 2012-06-06
回 22楼(cathy87) 的帖子
改改看看吧,怎么也能好点。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线myer

只看该作者 24楼 发表于: 2012-06-07
UI相应慢,8成都是刷新的问题。
http://user.qzone.qq.com/56430808
离线jdwx

只看该作者 25楼 发表于: 2012-06-07
回 24楼(myer) 的帖子
还真不是刷的问题,如下图:
两个QListWidget+QSplitter,什么都没有了,一行代码也没写。
拖动分割条CPU占用很高。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线kimtaikee

只看该作者 26楼 发表于: 2012-06-07
回 25楼(jdwx) 的帖子
QSplitter 在用户拖动handle时是实时更新的,而MFC或者其他windows SDK 开发出来的Splitter 控件都是在用户拖动完释放鼠标才会更新显示区域,你看看VS就知道了。如果非要达到很好的性能表现,我觉得那就弃QSplitter 自己写一个这样的分隔符控件。

离线jdwx

只看该作者 27楼 发表于: 2012-06-07
其实本人不是很在意QSplitter的效率,只要不影响使用就好,只不过有点惊讶,
这个的效率太低。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
快速回复
限100 字节
 
上一个 下一个