Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt没有使用openni2显示QImage_Qt_Openni_Qimage_Qlabel - Fatal编程技术网

Qt没有使用openni2显示QImage

Qt没有使用openni2显示QImage,qt,openni,qimage,qlabel,Qt,Openni,Qimage,Qlabel,我试图在QLabel中显示QImage,但它似乎不起作用。我有这样的想法: ui->color->setPixmap(QPixmap::fromImage(colorimg)); ui->color->show(); 图像由以下各项设置: colorimg = getColorImage(); 其中: getColorImage(){ const unsigned char *color_pixel; VideoStream *stream = &

我试图在QLabel中显示QImage,但它似乎不起作用。我有这样的想法:

 ui->color->setPixmap(QPixmap::fromImage(colorimg));
 ui->color->show();
图像由以下各项设置:

colorimg = getColorImage();
其中:

getColorImage(){
    const unsigned char *color_pixel;
    VideoStream *stream = &color;

    int ready_index;
    OpenNI::waitForAnyStream(&stream, 1, &ready_index);

    if(ready_index == 0)
    {
        VideoFrameRef color_frame;
        color.readFrame(&color_frame);

        if(color_frame.isValid())
        {
            color_pixel = (const unsigned char*)color_frame.getData();
        }
    }
    QImage image = QImage(color_pixel, color.getVideoMode().getResolutionX(), color.getVideoMode().getResolutionY(), QImage::Format_RGB888);
    return image;
}

我的应用程序运行时不会生成错误,但名为color的标签仅显示默认文本标签。有人能帮我吗

我已经解决了,问题不在于Openni的使用,而是Qt造成的。Qt只能在控件返回到事件循环时更新UI。因此,您必须调用qApp->processEvents;为了强制更新UI。

您希望哪个插件处理图像加载?您是否尝试检查颜色像素是否确实包含数据?请尝试使用包含bytesperline的定义。。。另外,检查返回后数据是否仍然存在。。。QImage只是指向数据,如果数据因任何原因消失,它将无法继续工作。。。另外,您应该在调用此函数和加载此QImage的部分中插入一个片段,也许错误就在那里…@api55谢谢您的建议,但我有点经验不足。那么你能告诉我如何检查彩色像素内容吗?我试过使用cout,我确信它不是空的,但很明显,输出是一系列字符串,我希望它们是正确的内容,但我不知道它们是否是。对于bytesperline的问题,我已经试过使用QImage image=QImagecolor\u pixel,color.getVideoMode.getResolutionX,color.getVideoMode.getResolutionY,color_frame.GetStratidinBytes,QImage::Format_RGB888;,但它仍然不起作用。你可以一直尝试打印前9个单元格,它会给你一些介于0-255之间的信息。。。但是如果你检查函数内部和外部,它应该给你相同的数字。也许你可以尝试使用静态图像,比如所有像素都是黑色的qimage,如果它不工作,可能是其他地方的问题。如果是这样,那么它可能在这个函数中遇到了问题。您是否尝试过创建数组的副本而不是仅仅指向它?