Qt setPixmap()无法动态使用setGeometry()

时间:2014-06-06 07:22:11

标签: c++ qt

我正在实现类似小标签的东西,以显示鼠标随附的图像细节。我完成了鼠标移动事件信号并使用opencv放大了图像处理。

接收鼠标移动事件并更新标签位置和图像数据的插槽。

void CameraView::updateMouseCurcor()
{
    if(superres_mode)
    {
        label_x=ui->frameLabel->getMouseCursorPos().x();
        label_y=ui->frameLabel->getMouseCursorPos().y();

// opencv based function to produce the zoom in detailed image src
        toyFuncion(input,output);  

        label_x+=ui->label->width();
        ui->label_3->setGeometry(label_x,label_y,WINDOW_WIDTH,WINDOW_HEIGHT);

        smallPic = QImage((const unsigned char*)(output.data),output.cols,output.rows,output.cols*output.channels(),QImage::Format_RGB888);
        ui->label_3->setPixmap(QPixmap::fromImage(smallPic));
    }
}

问题是,带有图像的小标签不会出现。

如果我发表评论label_3->setPixmap(QPixmap::fromImage(smallPic));我可以正确地看到我的标签文字。 enter image description here

我已经调试并检查小图像数据是否完全正常。我尝试在ui->label->setPixmap(QPixmap::fromImage(smallPic));旁边的另一个标签中显示它 enter image description here

如果我注释掉label_3->setPixmap(QPixmap::fromImage(smallPic));并在构造函数中设置标签,如:

cv::Mat temp;
    cv::resize(src,temp,cv::Size(WINDOW_WIDTH,WINDOW_HEIGHT));
    smallPic = QImage((const unsigned char*)(temp.data),temp.cols,temp.rows,temp.cols*temp.channels(),QImage::Format_RGB888);

    ui->label_3->setPixmap(QPixmap::fromImage(smallPic));

    ui->label_3->setScaledContents(true); 

图像显示并用我的鼠标移动得很好。 enter image description here

我想知道我的实施方式出了什么问题,标签的控制层如何以及如何同时更新标签的几何图形和图像。

1 个答案:

答案 0 :(得分:0)

我认为你的问题就在这里

ui->label_3->setGeometry(label_x,label_y,WINDOW_WIDTH,WINDOW_HEIGHT);

而不是WINDOW_WIDTH和WINDOW_HEIGHT尝试给出图像的宽度和高度。设置标签的pixmap后设置geomtery。