• 8120阅读
  • 5回复

从线程调用主界面的控件问题 [复制链接]

上一主题 下一主题
离线bjtiger
 
只看楼主 倒序阅读 楼主  发表于: 2008-08-13
— 本帖被 XChinux 执行加亮操作(2008-08-14) —
void Thread::run()
{ QString temp;
    while (!stopped)
    {
     temp=temp+"hello";//
     }
}
   
      tx->append(temp);
    stopped = false;
   
}


void Thread::passtx(QTextEdit *ttxedit)
{
     this->tx=ttxedit;
   
}


在主界面线程中建立这个线程,然后调用实例的passtx将主界面的QTextEdit 地址传过来,运行这个线程,线程结束时,将字符串放入主界面的QTextEdit 。在qt3.3下编译通过。
现在的问题是,执行一次这个进程没有问题,但是不断的建立进程,关闭进程时就会出现错误。
请大侠们指点一下为什么。谢了。
另外在进程中写一个while循环,不断的往主界面的QTextEdit 写数据也会出现这个错误。
离线XChinux

只看该作者 1楼 发表于: 2008-08-14
得用signal/slot来实现。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线xjcook

只看该作者 2楼 发表于: 2008-08-14
线程里面直接操作界面元素是肯定不行的,即使不总是出现错误,偶尔也会出莫明其妙,在文档里面已经有说了,你再找找看,
你需要使用比如postEvent之类的异步处理方式.
至于进程中的那个错误,你设断点调试下吧.
离线liyiq_82

只看该作者 3楼 发表于: 2008-08-14
这个问题在.NET下是从线程不能直接调用主线程的控件的,应该要用到异步回调函数.我想Qt也是这个原因吧。
离线bjtiger
只看该作者 4楼 发表于: 2008-08-14
signal/slot只能是在qt4.0以上版本中用。
离线mumutouv

只看该作者 5楼 发表于: 2008-08-15
我倒
快速回复
限100 字节
 
上一个 下一个