【问题标题】:Passing a QImage to a method - pointer confusion将 QImage 传递给方法 - 指针混淆
【发布时间】:2014-12-17 15:59:17
【问题描述】:

我正在开发一个 QT 图像应用程序。现在我想从文件中加载图像,显示它,然后单击按钮将其更改为灰度。

这是我对转换函数和图像对象的公开声明

public:
QImage * MainWindow::greyScale(QImage * origin);
QImage myImage;

在我的“打开文件”操作中,我初始化图像并将其显示在这样的标签中

myImage.load(fileName);

myImage = myImage.scaled(400, 300);
ui->imageLabel->setPixmap(QPixmap::fromImage(myImage));

这是我的灰度转换方法

QImage * MainWindow::greyScale(QImage * origin){
QImage * newImage = new QImage(origin->width(), origin->height(), QImage::Format_ARGB32);

QColor oldColor;

for(int x = 0; x<newImage->width(); x++){
    for(int y = 0; y<newImage->height(); y++){
        oldColor = QColor(origin->pixel(x,y));
        int average = (oldColor.red()+oldColor.green()+oldColor.blue())/3;
        newImage->setPixel(x,y,qRgb(average,average,average));
    }
}

return newImage;
}

现在我遇到的问题是我不确定如何正确调用转换方法并将返回的对象存储在新图像中。我想发送我的原始图像(myImage),但如果我这样做

QImage newPic = greyScale(myImage);

我收到错误“无法将参数 1 从 'QImage' 转换为 'QImage *'

我是否需要传递指针或引用或其他东西?我尝试了多种组合,但没有任何效果。我对语法不是很清楚

QImage * origin 

请帮忙!!

【问题讨论】:

    标签: c++ qt pointers object qimage


    【解决方案1】:

    让我们改变那个调用并逐步理解它,为此你需要注意两件事:方法返回,以及它需要什么参数 .

    该方法清楚地为新的QImage 分配空间并返回指向该对象的指针。所以第一个改变将解决这个问题:

    QImage* newPic = greyScale(myImage);
    

    其次,方法期望现有QImage对象的内存地址(指针)。所以我们继续提供myImage的地址:

    QImage* newPic = greyScale(&myImage);
    

    就是这样。

    【讨论】:

      【解决方案2】:

      你的方法接收一个指向 QImage 的指针作为参数。将其更改为QImage * MainWindow::greyScale(const QImage &amp;origin)myImage声明为指针:QImage *myImage = new QImage (/*some params if needed*/);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-12
        • 2016-05-02
        • 2013-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多