我有以下代码。
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用于Windows 我正在使用dll,Qt不在路上。
我刚刚意识到我正在静态链接到其他库使用的经典第三方jpeg.lib(Independent JPEG Group的JPEG软件)。
是否可能因此发生冲突或其他事情?
或者只是插件没有正确加载。
答案 0 :(得分:5)
可能它找不到插件......
您可以将库路径添加到项目中,也可以将imageformats文件夹放在二进制文件附近。
imageformats文件夹位于插件中..
(可能你也不能显示jpeg图像)
答案 1 :(得分:4)
如果要进行静态构建,则必须将QTPLUGIN += qjpeg
添加到.pro文件中,以便将imageformats的静态jpeg库与应用程序链接。
答案 2 :(得分: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版本将查找调试插件并且无法加载它们。