看看代码:
QImage *qi = new QImage(fullCharArray, imwidth, imheight, QImage::Format_Indexed8);
ui->viewLabel->setPixmap(QPixmap::fromImage(qi,Qt::AutoColor));
为什么这会给我一个错误?是什么让我在调用fromImage时更改qi参数?我对C ++比较陌生,似乎我正确地设置了它。如果我将行更改为
,它可以工作QImage *qi = new QImage(fullCharArray, imwidth, imheight, QImage::Format_Indexed8);
ui->viewLabel->setPixmap(QPixmap::fromImage(qi[0],Qt::AutoColor));
但这是正确的方法吗?
答案 0 :(得分:3)
这是因为QPixmap::fromImage期望引用图像,而不是指向图像的引用。
然而,将你的qi [0]更改为* qi,这意味着更清洁。 (或者只是避免使用指针并以QImage qi(fullCharArray ...
开头)。
答案 1 :(得分:2)
如果您在问题中提供错误消息,通常情况下可能有所帮助。现在从查看qts在线文档,我认为您的问题如下:
您正在尝试将QImage*
类型的qi传递给QPixMap::fromImage,它会const QImage&
,因此引用QImage。因此,您需要做的是取消引用qi
:
ui->viewLabel->setPixmap(QPixmap::fromImage(*qi,Qt::AutoColor));
这与您的第二个版本ui->viewLabel->setPixmap(QPixmap::fromImage(qi[0],Qt::AutoColor));
基本相同,因为ptr[i]
定义为*(ptr+i)
,因此ptr[0]
基本上代表*(ptr+0)
*ptr
}}。但是,使用*
进行解除引用可以更清楚地取消引用指向单个对象的指针,而不是数组。
答案 2 :(得分:0)
看起来QPixmap::fromImage
将QImage
作为第一个参数,而不是pointer to a QImage
。
答案 3 :(得分:0)
qi是一个指针,而setPixmap看起来就像是在等待一个对象,所以这就是第一个版本失败的原因。
正确的方法是
QImage *qi = new QImage(fullCharArray, imwidth, imheight, QImage::Format_Indexed8);
ui->viewLabel->setPixmap(QPixmap::fromImage(*qi,Qt::AutoColor));