とりわけ、Outlook 風の毎週のスケジュール (上部に曜日、左側に時間、予定を表すグリッド内のボックス) を作成するプログラムを作成しています。QGraphicsScene クラスをサブクラス化し、それを QGraphicsView と組み合わせて使用して、GUI にスケジュールを表示しています。
スケジュールを印刷しようとしているときに問題が発生します。ページに合わせて印刷し、自動的に拡大縮小したいと思います。私が行った調査から、コードは比較的単純なはずです。
QPrinter printer( QPrinter::HighResolution );
if( QPrintDialog( &printer ).exec() == QDialog::Accepted )
{
QPainter painter( &printer );
schedule_scene->render( &painter );
}
ただし、これにより、信じられないほど小さなボックスでシーンをレンダリングしようとしているかのように、テキスト ラベルが左上隅に詰め込まれ、ボックスやグリッド線が表示されない出力が生成されます。次の変更を加えた場合:
schedule_scene->render( &painter, QRectF( 0, 0, 600, 600 ) );
次に、期待どおりに小さな 600x600 ボックスに印刷されます。
現在、開発マシンに実際のプリンターを接続していないため、Windows XPS プリンターと CutePDF プリンターの両方でこれをテストしています。
私が行った調査によると、QGraphicsScene は、すべてのデフォルト パラメータでページを埋めるようにスケーリングする必要があります。サブクラス化されたシーンがページ全体に合わせて自動的に拡大縮小されないのはなぜですか? 実装する必要のあるメソッドを見逃していませんか?
編集:コードでページサイズを手動で設定すると、問題が修正されます:
QPrinter printer( QPrinter::HighResolution );
if( QPrintDialog( &printer ).exec() == QDialog::Accepted )
{
printer.setPageSize( QPagedPaintDevice::PageSize::Letter );
QPainter painter( &printer );
schedule_scene->render( &painter );
}
[印刷] ダイアログがページ サイズを独自に設定しないのはなぜですか?