【问题标题】:How to set QLabel using setPixmap from pointer QImage *image?如何使用来自指针 QImage *image 的 setPixmap 设置 QLabel?
【发布时间】:2023-03-07 23:31:01
【问题描述】:

我正在尝试运行两个线程。一个是非 GUI 线程,另一个是 GUI 线程。现在,当我尝试使用命令将图像放入 QLabel 时
imageLabel->setPixmap(QPixmap::fromImage(image));
然后我得到一个错误:QPixmap:在 GUI 线程之外使用像素图是不安全的

所以,要处理上面提到的问题。我已经在我的头文件中声明了QImage *image;,并且我使用image = new QImage(&(msg->data[0]), msg->width, msg->height, QImage::Format_RGB888); 将我的图像从msg 获取到*image,然后我想通过这个指针在QLabel 中设置我的图像。但是我不明白,现在应该使用什么格式的setPixmap。 通常的代码 imageLabel->setPixmap(QPixmap::fromImage(image)); 现在不起作用,因为 QImage *image 是类型指针。

所以,基本上我正在尝试执行以下操作:-

QImage *image; //in header file
QLabel *imageLabel: //in header file

image = new QImage(&(msg->data[0]), msg->width, msg->height, QImage::Format_RGB888);
imageLabel->setPixmap(QPixmap::fromImage(???????));

【问题讨论】:

    标签: multithreading qt qt-creator ros


    【解决方案1】:

    您需要使用* 运算符将QImage* 转换为QImage&

    imageLabel->setPixmap(QPixmap::fromImage(*image));
    

    但是,如果您在错误消息中看到“GUI 线程之外”,则表示您正在尝试在另一个线程中设置标签的像素图。这是不可能的。除了 QPixmap 问题,不允许在 GUI 线程之外使用 GUI 对象。

    【讨论】:

    • 其实我已经在头文件中声明了一个函数void SelectionInterface::assignImage()作为一个槽函数。然后,我想在按下按钮时调用此函数。在这个函数中,我想通过写代码imageLabel->setPixmap(QPixmap::fromImage(*image));*image 分配给imageLabel 但是当我按下按钮时......然后什么也没有发生
    • 检查该功能是否作为插槽功能工作....我尝试在单击按钮时在 imageLabel 中放置一些文本..它起作用了。然后在同一个功能中,我尝试从我的计算机加载一些图像,并在按下按钮时将其放入 imageLabel 中......它不起作用。不明白为什么?
    • 也许您应该创建另一个问题并提供更详细的解释。此问题与您的原始问题完全分开。
    猜你喜欢
    • 2018-12-09
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    相关资源
    最近更新 更多