QLabel从插槽调用更新未更新

时间:2013-06-26 19:30:55

标签: c++ qt

我使用了一个例子(众所周知)使用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没有更新的原因有任何建议?我也知道图像数据实际上正在发生变化,因为我可以将单个像素打印到屏幕上并观察它们正在发生变化,就像我在起飞和戴上镜头盖时所期望的那样。

1 个答案:

答案 0 :(得分:0)

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

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

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

你是在一个单独的线程中进行帧获取吗?