用while循环textbrowser.append 输出卡死

joeydan1 2011-08-30 11:39:15
hi 大家好,小弟第一次发贴,希望能帮我解答,谢谢.

我不明白为什么 如果我用while循环 textbroser.append ("message")时,假设我循环十次,程序并不是没循环一次就在textbrowser 上输出一次,而是循环十次后, 在main() 里面的最后一句 return exec()也循环十次后,才一次性把所有都打印出来. 有没有其它方法可以让我在while 循环里面每次 append 后都马上输出到UI控件上呢?

mywindows :: mywindows{
while (cnt < 10){

textbrowser.append (qs.append("message")); //这里并不会马上输出.
cnt+;

}
}

main(){

mywindow *mw = new mywindow;
mw->show();

return app.exec(); // 要等这里循环十次后才输出


}


daniel`
...全文
861 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
joeydan1 2011-08-31
  • 打赏
  • 举报
回复
我在DEBUG 模式看过, 并不是每次textBrowser->append(message)都会在UI上有显示,而是不定期刷新显示,我怀疑PROCESS_EVENT不是立即响应的,就算我加了QApplication::processEvents()也还是一样,. 难道就没有立即响应的办法吗?
joeydan1 2011-08-31
  • 打赏
  • 举报
回复
或者我再把代码详细点.
线程类的实现
Thread :: Thread(){
}

void Thread::run(){
QString qs;
int cnt = 0;
while(1){
emit log(qs.number(cnt));
sleep(1); // 如果这里不加延时,整个GUI就会卡死.
cnt++;
}
}
UI类的实现并不是全部

mainwindow::mainwindow(QWidget *parent):QMainWindow(parent)
{
setupUi(this)
connect (pushButton1, SIGNAL(clicked()), SLOT(startThreadA()));

}

void mainwindow::startThreadA(){
Thread *threadA = new Thread;
connect (threadA, SIGNAL(log(QString)), SLOT(pop(QString)));
}

void mainwindow::pop(QString message){
textBrowser->append(message);

}
dbzhang800 2011-08-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dext 的回复:]

感觉问题不是出现在你帖的代码里。
还有 是 ++
[/Quote]
肯定是还有耗时操作的代码(不然他也感觉不出10次循环后了)

dext 2011-08-31
  • 打赏
  • 举报
回复
感觉问题不是出现在你帖的代码里。
还有 是 ++
joeydan1 2011-08-30
  • 打赏
  • 举报
回复
自己先顶一下.

16,818

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧