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のドキュメント全体を調べましたが、詳細を見つけることができませんでした. それはうまくいくはずです。何か案は?

Windows 用の Qt 商用版 4.5.1 を使用しています。
dll を使用していますが、Qt がパスにありません。

他のライブラリで使用されている古典的なサードパーティの jpeg.lib (The Independent JPEG Group の JPEG ソフトウェア) に静的にリンクしていることに気付きました。

これが原因で衝突とか何かが起こる可能性はありますか?

または、単にプラグインが正しく読み込まれていない可能性があります。

4

3 に答える 3

5

おそらくプラグインが見つからない...

プロジェクトにライブラリ パスを追加するか、単純に imageformats フォルダーをバイナリの近くに置くことができます。

imageformats フォルダーはプラグインにあります。

(おそらくJPEG画像も表示できません)

于 2009-07-17T10:43:55.310 に答える
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 マシンにコピーすると、フォーマットが失われることがあります。デバッグ バージョンはデバッグ プラグインを探しますが、読み込みに失敗します。

于 2009-08-07T12:28:37.743 に答える