1

とりわけ、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 );
}

[印刷] ダイアログがページ サイズを独自に設定しないのはなぜですか?

4

0 に答える 0