首页 > 解决方案 > 在 QT 我有函数 xyz() 并且我需要同时返回 QImage 和 QString ?

问题描述

在函数 xyz() 中,我正在计算字符串值和图像数量,我需要返回所有值,如字符串和图像。那么,我需要什么来获取返回类型,以便它们获取所有值?

<Return-Type> MainWindow::xyz(QString m_ImgPath, int i)
{
    try
    {
        m_ImgPath = Array[i];
        QByteArray m_path = m_ImgPath.toLocal8Bit();
        char* ImagePath = m_path.data();

      obj *m_ThumpDCMReader = obj::New();
        TReader->SetFileName(ImagePath);
        TReader->Update();
        //const QString string = NULL;
        const char *str_uchar = TReader->GetMetaData()->GetAttributeValue(DC::string).GetCharData();
        string = QString::fromUtf8((char *)str_uchar);
        SPointer<ImageData> imageData = TReader->GetOutput();
        if (!imageData) { return QImage(); }

        /// \todo retrieve just the UpdateExtent
        int width = imageData->GetDimensions()[0];
        int height = imageData->GetDimensions()[1];

        QImage image(width, height, QImage::Format_RGB32);
        QRgb *rgbPtr =  reinterpret_cast<QRgb *>(image.bits()) + width * (height - 1);
        unsigned char *colorsPtr = reinterpret_cast<unsigned char *>(imageData->GetScalarPointer());
        for (int row = 0; row < height; row++)
        {
            for (int col = 0; col < width; col++)
            {
                *(rgbPtr++) = QColor(colorsPtr[0], colorsPtr[1], colorsPtr[2]).rgb();
                colorsPtr += imageData->GetNumberOfScalarComponents();
            }

            rgbPtr -= width * 2;
        }
        return (Image,string)
    }
    catch (...) { return QImage(); }
}

所以我需要添加返回类型。所以,它们将返回多个数据。

标签: qtqstringqimage

解决方案


您可以QPair<QString, QImage>为此使用 a ,并使用它qMakePair来构建值:

QPair<QString, QImage> MainWindow::xyz(QString m_ImgPath, int i) {
    try {
        // ...
        return qMakePair(string, Image);
    } catch (...) {
        return qMakePair(QString(), QImage());
    }
}

然后调用者可以使用.first.second访问字符串和图像,分别:

auto values = xyz("",0); // or QPair<QString, QImage> values = xyz("",0);
auto str = values.first;
auto img = values.second;

如果您需要扩展到超过 2 个项目,我建议使用自定义结构,例如:

struct StringWithImage {
    QString string;
    QImage image;
};

// In your return:
return StringWithImage{ string, Image };

// Usage:
auto values = xyz("", 0);
auto str = values.string;
auto img = values.image;

推荐阅读