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