2013-06-26 24 views
0

我已经使用了使用QLabel来显示图像数据的示例(通常已知),我将它从相机中取出。相关的代码如下:QLabel从插槽调用更新不更新

void myGUI::updatePic1(imgStructColorQt image) 
{ 
    QImage img((const uchar*)image.data,BUFFER_XSIZE,BUFFER_YSIZE, COLOR_BUFFER_BYTE_SIZE*BUFFER_XSIZE, QImage::Format_RGB32); 
    img = img.scaled(514,388); 
    if (!img.isNull()) 
    { 
     ui->cam1view->setPixmap(QPixmap::fromImage(img)); 
     ui->cam1view->update(); 
     ui->cam1view->repaint(); 
     std::cout << "image updated!" << std::endl; 
    } 
    else 
     std::cout << "image is null" << std::endl; 
} 

updatePic1哪里是一个名为约30倍带更新的图像数据的第二时隙。在我的主GUI窗口中,我的QLabel,cam1view显示第一个图像,但从未更新过。我知道插槽被正确调用,因为我看到控制台输出显示“图像已更新!”大约每秒30次。有没有人有任何建议,为什么QLabel没有被更新?我也知道图像数据实际上在变化,因为我可以在屏幕上打印单个像素,并观察它们正在改变,就像我在脱下并戴上镜头盖时所期望的那样。

+0

如果您为其设置文本,标签是否更新? – thuga

回答

0

哪个线程正在调用此插槽?

请记住,如果发出信号的QObject和接收它的QObject生活在同一个线程中,那么连接将是直接的,而不是使用事件队列进行调度。

这可能是您的事件线程是处理包含发射的循环的线程。在这种情况下,您的应用程序将永远不会更新GUI,因为它已锁定处理您的循环。

你是否在单独的线程中进行帧采集?

+0

是的,帧采集和发射在一个单独的线程中,使用moveToThread()函数,如下所述:http://qt-project.org/doc/qt-5.0/qtcore/qthread.html#details – daaxix