这个函数调用有什么问题

时间:2011-01-18 17:37:40

标签: c++ qt

看看代码:

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));

但这是正确的方法吗?

4 个答案:

答案 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::fromImageQImage作为第一个参数,而不是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));