标题:qt读取.bin文件,显示在textEdit上,显示速度特别慢
作者:ayumi.
日期:2017-09-19 16:54
内容:
最近需要写一个小工具,读.bin文件(文件大小200k),16进制显示,然后分包发送出去。
程序在执行ui->textEdit->insertPlainText (*tempStr);会等一会才显示。
点击我下载源码
下面是打开文件并显示槽函数:
void MainWindow::on_openFileButton_clicked()
{
//get file name
fileName = QFileDialog::getOpenFileName(this,"Open File",QDir::currentPath());
//qDebug()setText (fileName);
if(fileName.isEmpty())
{
QMessageBox::information(this,"Error Message", "Please Select a Text File");
return;
}
QFileInfo *pcsfileInfo = new QFileInfo(fileName);
binSize = pcsfileInfo->size ();
QFile* file = new QFile;
file->setFileName(fileName);
bool ok = file->open(QIODevice::ReadOnly);
if(ok)
{
//QTextStream in(file);
//ui->textEdit->setText(in.readAll());//read all context from the file
}
else
{
QMessageBox::information(this,"Error Message", "File Open Error" + file->errorString());
return;
}
&n ..
#1 [lemonzll 09-19 22:08]
qtextedit速度是很慢,功能要求比较少的话可以用qplaintextedit,速度会稍微快点。以前做过软件接收到网络消息时进行显示,用qtextedit很卡,行数多了没法用,只好限制最大行数,并且换用qplaintextedit稍微优化点,要实在性能不行可以看下scintilla这个编辑器控件,qt可以用的,不过功能要求少的话用scintilla就得不偿失了
#2 回 lemonzll 的帖子 [ayumi. 09-20 09:07]
lemonzll:qtextedit速度是很慢,功能要求比较少的话可以用qplaintextedit,速度会稍微快点。以前做过软件接收到网络消息时进行显示,用qtextedit很卡,行数多了没法用,只好限制最大行数,并且换用qplaintextedit稍微优化点,要实在性能不行可以看下scintilla这个编辑器控件,qt可以用的, .. (2017-09-19 22:08)
我调试的时候认为是200k的Qstring太长了,就想用for循环把Qstring拷贝到一个比较小的Qstring中,在for循环中使用append方法,这样可能会好一些,但是我发现,for循环执行完毕后,才开始在textEdit上显示。
请问除了您说的,sdintilla这个控件还有没有其它的方法?
我想做到下面图片的效果,文件被分成固定长度字符串显示在表格里。
还有就是,左面的那种树形结构,前面可以勾选,qt的树形结构好像没有这个。这个是不是可以设置?
#3 [lemonzll 09-20 09:32]
200K的QString已经很大了。文本显示你看你需不需要编辑,要有编辑功能的话就QTextEdit和QPlainTextEdit这两个,性能不够的话暂时除了scintilla我也没找到好方法。不需要编辑功能的话好办点,用qlabel或者自己用qwidget画。树形结构群里很多,你可以查下。你那里图里面显示还有三态的,我找了两个可参考的,http://www.qtcn.org/bbs/read-htm-tid-57249.html和http://www.qtcn.org/bbs/read-htm-tid-55887-ds-1.html#tpc。要是不需要三态就好写很多了
#4 回 lemonzll 的帖子 [ayumi. 09-20 09:36]
lemonzll:200K的QString已经很大了。文本显示你看你需不需要编辑,要有编辑功能的话就QTextEdit和QPlainTextEdit这两个,性能不够的话暂时除了scintilla我也没找到好方法。不需要编辑功能的话好办点,用qlabel或者自己用qwidget画。树形结构群里很多,你可以查下。你那里图里面显示还有三态 .. (2017-09-20 09:32)
谢谢~~原来那个叫做三态树。。。原谅我是个小白,见笑了。
qlabel,qwidget自己画是自己画出一个textedit来吗?
#5 [lemonzll 09-20 09:46]
你看需不需要编辑功能,不需要编辑功能的话直接用qlabel显示字符串就行