• 7023阅读
  • 10回复

[讨论]GUI响应问题 [复制链接]

上一主题 下一主题
离线cesc1988
 
只看楼主 正序阅读 楼主  发表于: 2012-01-06
在主界面类上有几个QLineEdit,主程序开始后创建另一个视频采集处理线程,在该线程类中完成如下工作1.采集视频,视频显示在改写后的imagelQlabel上2.对视频做某种算法3.把计算所得的结果显示在界面的QLineEdit,采集一帧处理一次。在线程的初始化中,把界面类的QLineEdit变量赋给线程中的QLineEdit变量。
现在的情况是视频可以顺利的显示,但一旦做上述的步骤3,则程序会异常错误。如果让采集的视频不显示,仅做QLineEdit->settext("ddd"),程序也会异常错误。网上找了下原因,说控件操作要在主线程上(界面类上)做,但如何改写,让主线程和视频采集处理线程通信起来。
请教各位,这是什么原因?
离线cesc1988
只看该作者 10楼 发表于: 2012-01-08
回 9楼(jdwx) 的帖子
恩 是我
之前犯了低级错误
次线程的类在connect之前没有初始化 是空指针
所以程序异常
谢谢了
离线jdwx

只看该作者 9楼 发表于: 2012-01-08
回 8楼(cesc1988) 的帖子
其实很简单
次线程
signals:
void textChange(const QString &text);
主线程
slots:
void setText(const QString &text);
在次线程里用 emit textChange(“ABC”);  替换main->setslope("aa");

顺便问问这个是也你吧?
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线cesc1988
只看该作者 8楼 发表于: 2012-01-08
回 7楼(jdwx) 的帖子
sourcelabel->setimage(c);//获得一帧图像
main->setslope("aa")//main是主窗口的一个指针
单独采集图像(即只有第一行代码)很顺利,但采集后马上做第二行操作的话  程序界面就卡死,采集图像不刷新了,这是什么原因导致的?
离线jdwx

只看该作者 7楼 发表于: 2012-01-06
回 6楼(cesc1988) 的帖子
connect(mythread,SIGNAL(textchanged()),this,SLOT(setslope()))
问题在信号和槽的参数上面,你的信号和槽没有参数,给QLineEdit的QString从哪里取得?
最简单的是把QString放到信号和槽的参数里传出来。
要不就要用QMutex访问线程里的变量
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线cesc1988
只看该作者 6楼 发表于: 2012-01-06
回 4楼(jdwx) 的帖子
见五楼
离线cesc1988
只看该作者 5楼 发表于: 2012-01-06
回 3楼(dbzhang800) 的帖子
有两个类 一个是mainthread 一个是mainwindows ,在mainwindows.cpp中写 connect(mythread,SIGNAL(textchanged()),this,SLOT(setslope())),mythread是在mainwindows.h申明的一个变量,信号textchanged())是在mainthread 类中申明的,然后槽函数setslope()是在mainwindows中申明的,主要是做QLineEdit的赋值操作。
运行程序跳出:程序异常错误。不知道哪里有问题,求请教?
离线jdwx

只看该作者 4楼 发表于: 2012-01-06
回 2楼(cesc1988) 的帖子
只要是继承QObject的任何类,信号和槽的参数能对应,就可以connect在一起。
还可以用在多线程。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线dbzhang800

只看该作者 3楼 发表于: 2012-01-06
Re:回 1楼(jdwx) 的帖子
引用第2楼cesc1988于2012-01-06 14:33发表的 回 1楼(jdwx) 的帖子 :
两个不同类之间也能用信号和槽联系起来?

信号和槽正常情况不都是这么用么?同一个类的对象间用信号槽进行连接的反而比较少见吧
离线cesc1988
只看该作者 2楼 发表于: 2012-01-06
回 1楼(jdwx) 的帖子
两个不同类之间也能用信号和槽联系起来?
离线jdwx

只看该作者 1楼 发表于: 2012-01-06
回 楼主(cesc1988) 的帖子
信号和槽就能解决问题。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
快速回复
限100 字节
 
上一个 下一个