• 13634阅读
  • 12回复

QT4使用了TreeView和TextEdit后性能特别差 [复制链接]

上一主题 下一主题
离线autinhorse
 

只看楼主 倒序阅读 楼主  发表于: 2006-04-25
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
我用QT4开发了一个简单的应用,左边是一个TreeView,使用了QAbstractListModel。参照了QT自己带的TreeView的例子。有接近4000项。
右边是一个EditText,使用setPlainText()加入了一个有1万行左右的文本。

现在我发现整个应用的性能无法接受,想改变一下窗口的Size(变大)或者调整一下左右的大小需要接近10秒钟,而且整个窗口明显可以看到一部分一部分出来的:先变大小,再出右边窗口的文字,然后是左边项目,然后是TreeView的滚动条。

如果QT的性能这么差的话,怎么可以用啊!
应该是我的用法有问题,哪位指点一下?多谢了。不要让我对QT的热情就此被扑灭啊!
[ 此贴被XChinux在2006-05-08 00:01重新编辑 ]
离线myer

只看该作者 1楼 发表于: 2006-04-25
楼主应该更有耐心一些
首先应该确定效率瓶颈在TreeView还是EditText
然后在确定具体的问题出在哪儿,Qt本身是没有问题的
插入几万行应该是不会有问题的
当数据比较大的时候,直接堆在一起也是不合理的,是否考虑使用数据库等等......
http://user.qzone.qq.com/56430808
离线autinhorse

只看该作者 2楼 发表于: 2006-04-25
刚刚在网上Search了一圈。发现很多人报QTreeView在插入大量数据后性能下降的问题。
然后自己写了一个小程序,就建立一个Application,在其中放一个QTextEdit。然后生成一个25000行的字符串用setPlainText放进去显示。
结果简直无法忍受。

哪位帮我看看我的程序有什么问题?还是有更好的使用QTextEdit的方法?

就用QT自动生成的Application,名字叫QTest
在QTest.h中 加了一个变量
QTextEdit * m_pTextEdit;

然后在QTest.CPP中修改如下:
QTest::QTest(QWidget *parent, Qt::WFlags flags)
  : QMainWindow(parent, flags)
{
   ui.setupUi(this);

   m_pTextEdit = new QTextEdit(this);

   setCentralWidget(m_pTextEdit);

   QString szContent;
   for( int i=0; i<25000; i++ ) {
       szContent += "test line test line test line test line test line test line \n";
   }
   m_pTextEdit->setPlainText( szContent );
}
离线myer

只看该作者 3楼 发表于: 2006-04-26
Qt4的QTextEdit不太适合大文本的处理,否则效果是很差。
原来Qt3的QTextEdit好像在设置log模式,效果还好一些。
http://user.qzone.qq.com/56430808
离线yfy002

只看该作者 4楼 发表于: 2006-04-26
这么多数据的话,我觉得你的程序也要优化下了,不能一次性的显示这么多的东西,可以参考下vi的代码!当然QTextEdit确实不太适合大文本的处理.
我渴望平静,风却给了我涟漪
我的blog:
http://sungaoyong.cublog.cn
离线autinhorse

只看该作者 5楼 发表于: 2006-04-26
我试了试QT自己带的RichEdit的例子,那个文本Highlight工具。打开一个20000行的文本的时候,也是根本无法忍受。
看样子确实是QT的问题。

不明白,难道QTextEdit不是自己检查那个部分数据应该显示然后只处理这部分吗?总不会弱智到处理全部20000行文本再显示吧。而且我试了,20000行空行性能也差不多。
离线myer

只看该作者 6楼 发表于: 2006-04-26
没有一个东西(class)是万能的,Qt也不可能提供适用于任何场合的所有部件,否则也不用做基于Qt的开发了。
Qt本来就是提供一个Gui元素的跨平台的封装,虽然提供了一些常用的组件工具而已,以后可能提供的更多……
http://user.qzone.qq.com/56430808
离线andelie

只看该作者 7楼 发表于: 2006-04-27
我觉得你可能是在读文件的时候把文件的所有内容一次性都给独了,当这些字符存在一个串里的时候就会非常费时间,而且你说的那个函数本身就不支持大文件的操作,会特别特别耗内存的。
离线hlpean
只看该作者 8楼 发表于: 2009-06-20
急需:  各位大虾
我在一个QTextEdit窗口里设计了有颜色,加粗,加下划线的字体,当我把它发送到另一个QTextEdit窗口里时,这些字体的颜色,加粗。加下划线就都没有了
     用什么函数来读、写才能保留我原来的格式(包括下划线,颜色,加粗等)?
hlpean
离线溟阡
只看该作者 9楼 发表于: 2009-06-29
我也遇到这个问题……慢的根本没办法忍受
有没有什么办法能够解决?或者有没有什么可以替代QTextEdit的?
离线平常道
只看该作者 10楼 发表于: 2009-07-02
这个,自己优化下就可以了吧
数据放在内存中或文件里,每次只在界面上显示一部分,随着滚动条的上下拖动加载数据到界面。
以前用delphi大富翁的离线浏览器,那有几十万条记录的,你用什么线程的控件都不好实现,就是作者自己写实现的。
离线280923299
只看该作者 11楼 发表于: 2009-07-02
我有一个建议:
http://www.riverbankcomputing.co.uk/software/qscintilla/download

QScintilla2好像就是针对这个问题的
离线ogred3d
只看该作者 12楼 发表于: 2012-08-14
Qt
快速回复
限100 字节
 
上一个 下一个