• 5154阅读
  • 6回复

使用线程run方法,窗体消失? [复制链接]

上一主题 下一主题
离线sunnysun520
 
只看楼主 倒序阅读 楼主  发表于: 2009-08-02
void Mythread::run()
{
    std::cout << " thread run ....." << std::endl;
    char *buf=(char *)malloc(512);
    int r_bytes;
    if(buf==NULL)
    {
        perror("malloc:");
        exit(1);
    }

    std::cout << " malloc success ....." << std::endl;
    while(1)
    {
        r_bytes=read(fd,buf,sizeof(buf));
        buf[r_bytes]='\0';
        QString txt=ADtext->toPlainText()+QString::fromLocal8Bit(buf,r_bytes);
        ADtext->setText(txt);
        ADtext->update();
    }
}
这一段是我重新实现的run方法,但是一执行窗体就自动消失了?请问为什么?循环读取串口来的数据在TextEdit (ADtex)t中显示。
离线dbzhang800

只看该作者 1楼 发表于: 2009-08-02
次线程 不能 操纵 UI界面的窗口部件!

如有需要,应该使用信号和槽
离线sunnysun520
只看该作者 2楼 发表于: 2009-08-02
哦 ,这样的阿,那行,方法错误了阿?我想从串口接受数据后显示在textedit中,请问串口数据的到来会产生什么信号?
离线20044454
只看该作者 3楼 发表于: 2009-08-02
ADtext 这个是GUI的一个对象吧, 你run()是一个QThread()类的函数 你怎么能从一个类里面直接调用另一个类的对象?
你在read()后 emit一个QString 在你GUI类里面 connect() 这个给ADtext赋值的槽函数
让我做一个Qt的大牛!!!!
离线sunnysun520
只看该作者 4楼 发表于: 2009-08-02
引用第3楼20044454于2009-08-02 21:54发表的  :
ADtext 这个是GUI的一个对象吧, 你run()是一个QThread()类的函数 你怎么能从一个类里面直接调用另一个类的对象?
你在read()后 emit一个QString 在你GUI类里面 connect() 这个给ADtext赋值的槽函数


谢谢了,但是最后一句不是很明白您的意思,说清楚点行吗?我初学,

我舍弃了线程,在GUI中用了个timer,用timerevent去读取数据 初步看起来能工作了,
离线20044454
只看该作者 5楼 发表于: 2009-08-03
最后一句话就是一个信号-槽 的机制,自己搜下坛子里有具体的例子
让我做一个Qt的大牛!!!!
离线dbzhang800

只看该作者 6楼 发表于: 2009-08-03
快速回复
限100 字节
 
上一个 下一个