当前位置: 代码迷 >> QT开发 >> QT pthread在线程函数中调用类的非静态成员函数解决办法
  详细解决方案

QT pthread在线程函数中调用类的非静态成员函数解决办法

热度:199   发布时间:2016-04-25 03:02:36.0
QT pthread在线程函数中调用类的非静态成员函数
我有一个test类,display是我的槽函数,在槽函数中用pthread开启线程,我已经用最简单的方法测试qt用pthread显示图片,可就是没有效果,,当点击按键时运行槽函数,,执行完了就是不显示图片,,,

ui.dis_label->setPixmap(QPixmap("E:\\triangle.jpg"));,这句话不放进pthread线程里,,就完全没有问题,,,不知道错在哪里了,,麻烦各位帮忙看一下,,,

我是为了一个视频显示使用pthread的,,我先把图片测试好后再做视频,,

void test::display()
{
pthread_t id;
void *arg;
ret = pthread_create(&id,NULL,dis_play,this);
if (ret != 0)
{
exit(1);
}

}
void *test::dis_play(void *arg)
{
test *pDlg  = (test*)arg;
pDlg->run();
return 0;
}

void test::run()
{

//qt 测试图片在主对话框中显示
ui.dis_label->setPixmap(QPixmap("E:\\triangle.jpg"));//直接显示

}
------解决思路----------------------
引用:
十分感谢,,你的意思现在不管我做什么建什么线程,只要用到ui下的控件来显示比如要使用ui.dis_label->setPixmap(QPixmap("E:\\triangle.jpg"));这样的语句来显示东西,,这种语句都必须放在主线程吗??


对的,文件操作,图片读取,图片处理,你都可以在次线程中进行。但是要将它显示出来,你需要先将该图片以线程安全的方式传递给主线程,而后主线程负责显示。

题外,QImage可以在次线程中使用,但是QPixmap不能在次线程中使用。
  相关解决方案