2

QPrintDialog を使用して、次のように QPrinter オブジェクトを初期化します。

QPrinter printer;
QPrintDialog dlg(&printer);
if (dlg.exec() == QDialog::Accepted)
{
   /* Are we printing to PDF? */
}

Windows では、出力先がファイルか PDF ライターかを簡単に検出できます。Mac では、同じ機能はどれも機能しません。

if ((printer.outputFormat() == QPrinter::PdfFormat)
 || (!printer.outputFileName().isEmpty()))
{
    qDebug("PDF mode");
}

オンラインで qprintdialog_mac.mm のコピーを見ると、QPrintDialogPrivate::closeCarbonPrintPanel() 関数で、Qt は出力がファイルにリダイレクトされているかどうかを検出しようとします。ファイル名を QMacPrintEnginePrivate のメンバーに格納します。どういうわけか、その名前は QPrinter オブジェクトには伝わりません。断線がどこにあるのかわかりません。

それで.....印刷出力が実際にファイルに送られるかどうかをどうやって知ることができますか? 簡単であれば、ここでプラットフォーム固有のものを取得したいと思います。ただし、Mac プログラミングの経験はありません。

4

2 に答える 2

0

これは Qt のバグでした。

Qt 5.3 では、2 番目の条件であるQPrinter::outputFileName().

于 2014-06-15T04:07:28.953 に答える
0

Qt 5.14 の時点では、QPrintDialog で [PDF として保存] が選択されていても、QPrinter の outputFileName プロパティは null のままです。

ただし、QPrinter オブジェクトに描画する場合は、正しいことが行われます。

  • 「プレビューで開く」を選択した場合、ペイントした内容がプレビューで開きます。
  • [PDF として保存] を選択すると、ファイル ダイアログがポップアップします。
  • [メールで送信] を選択すると、メール クライアントが開き、PDF が添付されます。

どういうわけか、QPrinter は、ダイアログからのすべての情報を、パブリック ゲッターからアクセスできない不透明な方法で保存しているようです。

Mac の印刷ダイアログからすべてのオプションをサポートする正しい方法は次のようです。

QPrinter printer;
QPrintDialog dlg(&printer);
if (dlg.exec() == QDialog::Accepted)
{
   QPainter painter;
   painter.begin(&printer);
   // do the painting
   painter.end();
}

残念ながら、独自の印刷ロジックを実装したい場合に QPrinter オブジェクトから情報を抽出することはできないようです。

于 2020-06-17T10:34:11.013 に答える