QGraphicsScene не будет масштабироваться до страницы при печати

Я пишу программу, которая, помимо прочего, создает еженедельное расписание в стиле Outlook (дни недели вверху, время внизу слева и поля в сетке для представления встреч). Я создал подкласс класса QGraphicsScene и использую его вместе с QGraphicsView для отображения расписания в графическом интерфейсе.

Проблема возникает сейчас, когда я пытаюсь распечатать расписание. Я хотел бы, чтобы это распечатывало и автоматически масштабировалось, чтобы соответствовать странице. Из проведенного мною исследования код должен быть относительно простым:

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 ) );

затем он печатается в маленькой коробке 600×600, как и ожидалось.

Я тестировал это как на принтере 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 );
}

Почему диалоговое окно «Печать» не заботится о настройке размера страницы самостоятельно?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]