4

Qt4 から Qt5 で問題が発生しています。私のアプリケーションでは、ユーザーが印刷ボタンをクリックすると、2 つのことが起こるはずです。 QPrintDialog は exec() を実行してから、接続されたプリンターに送信する必要があります。

開発マシンから起動するとダイアログが表示されます。アプリケーションはデプロイされたマシンで起動しますが、QPrintDialog は表示されず、ドキュメントは印刷されません。

印刷サポートを含めています。

QT += core gui network webkitwidgets widgets printsupport

Process Explorer を使用して、開発マシンでアプリケーションが使用する DLL を確認してきましたが、すべてが存在していると思います。私のアプリケーション バンドルには以下が含まれます。

  • {myAppPath}\MyApp[MyApp.exe, Qt5PrintSupport.dll, ...]
  • {myAppPath}\plugins\printsupport\windowsprintersupport.dll
  • {myAppPath}\plugins\imageformats[ qgif.dll, qico.dll,qjpeg.dll, qmng.dll, qtga.dll, qtiff.dll, qwbmp.dll ]

以下は、関連するコード スニペットです。

void PrintableForm::printFile()
{
    //Writes the PDF to disk in every environment
    pdfCopy();

    //Paper Copy only works on my dev machine
    QPrinter paperPrinter;
    QPrintDialog printDialog(&paperPrinter,this);

    if( printDialog.exec() == QDialog::Accepted ) {
        view->print(&paperPrinter);
    }
    this->accept();
}

私が最初に考えたのは、印刷時に関連する DLL が見つからないということです。これは、アプリケーション ファイル システムが正しくないことを意味しますが、別のファイル構造を示すものは何も見つかりませんでした。私は正しい軌道に乗っていますか、それともこのセットアップに何か問題がありますか?

4

1 に答える 1

7

これは、欠落しているプラ​​グインと不適切な場所に配置されたプラグインの組み合わせによる、Windows/Qt5 の展開に関するもう 1 つの古典的な問題でした。環境変数 QT_DEBUG_PLUGIN を使用し、PRO ファイルに CONFIG += CONSOLE を追加することで、開発マシンで、アプリケーションが出荷していない qminimal.dll をロードしていることを確認できました。

{myAppPath}\ として定義したアプリケーション ルートは、プラグインのルート ディレクトリです。したがって、正しいファイル構造は次のとおりです。

  • {myAppPath}\MyApp[MyApp.exe, Qt5PrintSupport.dll, ...]
  • {myAppPath}\platforms[qwindows.dll,qminimal.dll]
  • {myAppPath}\printsupport*
  • {myAppPath}\imageformats*
  • {myAppPath}\bearer*

リードしてくれたペッペに感謝します。

于 2013-07-03T17:02:45.317 に答える