3

我有以下代码。

QString fileName = QFileDialog::getSaveFileName(
   this, 
   tr("Output Image file"),
   (""),
   tr("PNG (*.png);;JPEG (*.JPEG);;Windows Bitmap (*.bmp);;All Files (*.*)")
);

if(fileName != "")
{
   QwtPlot* pPlot = ...
   QSize size = pPlot->size();
   QRect printingRect(QPoint(0, 0), size);

   QPixmap pixmapPrinter(size);
   pixmapPrinter.fill(Qt::white);

   {
      QPainter painter(&pixmapPrinter); 
      pPlot->print(&painter, printingRect);     
   } 

   bool isOk = pixmapPrinter.save(fileName);

   if(!isOk)
   {                
      QString msgText = tr("Failed to write into ") + fileName;

      QMessageBox::critical(this, tr("Error Writing"), msgText);
   }
}

所以,路径是这样的: - 弹出文件对话框 - 用户选择格式和文件 - 系统在 QPixmap 上绘制绘图 - 将 QPixmap 保存到文件中。

它适用于 PNG 和 BMP 没有问题,但对于 JPEG、jpg、JPG 等,它会失败。

我翻遍了 Qt 文档,但找不到任何细节。它应该可以工作。有任何想法吗?

我正在使用 Qt 商业版 4.5.1 for Windows。
我正在使用 dll,Qt 不在路径上。

我刚刚意识到我正在静态链接到其他库使用的经典第 3 方 jpeg.lib(独立 JPEG 组的 JPEG 软件)。

是否有可能因此而发生冲突或其他事情?

或者只是插件没有正确加载。

4

3 回答 3

5

可能是找不到插件...

您可以将库路径添加到项目中,也可以简单地将 imageformats 文件夹放在二进制文件附近。

imageformats 文件夹在插件中..

(可能你也不能显示 jpeg 图像)

于 2009-07-17T10:43:55.310 回答
4

如果您正在制作静态构建,则必须添加QTPLUGIN += qjpeg到您的 .pro 文件中,以便图像格式的静态 jpeg 库与您的应用程序链接。

于 2009-07-17T11:47:17.943 回答
4

您的插件很可能丢失,最好的工作方式是仅列出工具包支持的图像格式。

此示例来自我的插入图片,但您应该能够对其进行调整以保存为:

QString fileFormats = "(";
/* Get all inputformats */
for (int i = 0; i < QImageReader::supportedImageFormats().count(); i++) {
    fileFormats += "*."; /* Insert wildcard */
    fileFormats
            += QString(QImageReader::supportedImageFormats().at(i)).toLower(); /* Insert the format */
    fileFormats += " "; /* Insert a space */
}
fileFormats += ")";

QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"),
        currentPath, tr("Images ") + fileFormats);

此外,如果开发人员将调试版本复制到 QA 机器,我们有时会丢失格式。Debug 版本将寻找调试插件并且无法加载它们。

于 2009-08-07T12:28:37.743 回答