多线程加载大文件到QTextEdit中,该如何处理

多线程加载大文件到QTextEdit中
我要加载一个大文件到QTextEdit中,
就是在其他线程打开文件读取,然后写入到QTextEdit中去。
这样就不会导致main GUI线程无法响应。
1.  但是其他线程不能调用GUI元素啊。有什么好的办法吗?谢谢。
2.  我现在是想用readLine,这样一行一行读入,然后QTextEdit::append这样写入的。这样是否合适?谢谢
------最佳解决方案--------------------
引用:
别用Qstring
就用QFile read
然后按需读取  
你这样相当于把所有的文件全部加载进来 内存占的肯定比较大  而且估计QString不适合放这么多数据吧
这意味着QString每次当capacity不够时 要重新resize 然后拷贝原来的数据

readall不可以吗?一次读进QString。
------其他解决方案--------------------
个人感觉readAll会触发构造多个QString对象
每个QString对象在capacity()不够时  会重新resize 然后拷贝原来的数据 相当于构造了多次
对几十K的数据应该没问题 上10M的估计会多次resize

引用:
引用:
别用Qstring
就用QFile read
然后按需读取  
你这样相当于把所有的文件全部加载进来 内存占的肯定比较大  而且估计QString不适合放这么多数据吧
这意味着QString每次当capacity不够时 要重新resize 然后拷贝原来的数据
readall不可以吗?一次读进QString。

------其他解决方案--------------------
其实读文件不要很多时间,完全是显示费时间,可以具体测试一下读文件用多少时间(读取到一个QString里)。
------其他解决方案--------------------
class workThread: public QThread
{
Q_OBJECT
signals:
   void signal_read_done(QByteArray & data);
private:
   void run();
}
新创建一个workThread,在workThread里读取大文件。读取完毕的时候 emit signal_read_done,然后在界面线程里做slot,读取数据
------其他解决方案--------------------
引用:
class workThread: public QThread
{
Q_OBJECT
signals:
   void signal_read_done(QByteArray & data);
private:
   void run();
}
新创建一个workThread,在workThread里读取大文件。读取完毕的时候 emit sign……


我也想过这个样子。但是对于几十M的文件,这样读取我不知道QString会不会有问题。
------其他解决方案--------------------
别用Qstring
就用QFile read
然后按需读取  
你这样相当于把所有的文件全部加载进来 内存占的肯定比较大  而且估计QString不适合放这么多数据吧
这意味着QString每次当capacity不够时 要重新resize 然后拷贝原来的数据
------其他解决方案--------------------
引用:
别用Qstring
就用QFile read
然后按需读取  
你这样相当于把所有的文件全部加载进来 内存占的肯定比较大  而且估计QString不适合放这么多数据吧
这意味着QString每次当capacity不够时 要重新resize 然后拷贝原来的数据

我现在就是一行一行读取的啊。
我做在其他线程,就无法调用QTextEdit来插入了。
------其他解决方案--------------------
引用:
引用:
别用Qstring
就用QFile read
然后按需读取  
你这样相当于把所有的文件全部加载进来 内存占的肯定比较大  而且估计QString不适合放这么多数据吧
这意味着QString每次当capacity不够时 要重新resize 然后拷贝原来的数据
我现在就是一行一行读取的啊。
我做在其他线程,就无法调用QTextEdit来插入了。……


之前已经说了
你在其他线程处理完了 然后产生响应的事件 在QTextEdit中捕获这个signal 驱动响应的slot完成所有的操作
你不要直接在QTextEdit里操作  实际上非界面线程直接操作 GUI是非线程安全的
用signal - slot来完成

------其他解决方案--------------------
引用:
个人感觉readAll会触发构造多个QString对象
每个QString对象在capacity()不够时  会重新resize 然后拷贝原来的数据 相当于构造了多次
对几十K的数据应该没问题 上10M的估计会多次resize