QPrintPreviewDialog неверный предварительный просмотр - PullRequest
1 голос
/ 26 мая 2011

Используя QPrintPreviewDialog для предварительного просмотра печати, я использую следующий код

    QPrinter printer;
    printer.setResolution(QPrinter::HighResolution);
    printer.setPaperSize(QPrinter::A4);
    printer.setOrientation(QPrinter::Portrait);
    QPrintPreviewDialog *pd = new QPrintPreviewDialog(&printer);
    connect(pd,SIGNAL(paintRequested(QPrinter*)),this,SLOT(print(QPrinter*)));
    pd->exec();


void Class::print(QPrinter *p)
{
    QTextEdit *ted = new QTextEdit;
    ted->insertHtml("<center><img src='"+QString(":/img/logo.png")+"' width='90' height='72'/><b><font size='9'>Logo Text</font></b></center>");
    ted->document()->print(p);
}

При нажатии кнопки печати появляется это диалоговое окно:

enter image description here

Как вы можете видеть, содержимое распространяется по всей странице. Затем я нажимаю кнопку настройки страницы в диалоговом окне предварительного просмотра, и появляется следующее сообщение:

enter image description here

ничего не меняя, я нажимаю ОК, и тогда предварительный просмотр становится правильным :

enter image description here

Вопрос в том, как исправить предварительный просмотрпо коду?

Ответы [ 3 ]

1 голос
/ 07 июня 2011

Используйте QTextDocument вместо QTextEdit, последний является виджетом, который делает вывод зависящим от изменения размера.

0 голосов
/ 23 августа 2016

У меня была такая же проблема. Видимо, нажатие кнопки ОК в диалоговом окне настройки страницы изменяет разрешение. Чтобы исправить это, я изменяю разрешение обратно в методе, который вычисляет предварительный просмотр печати:

dialog = QPrintPreviewDialog()
dialog.paintRequested.connect(self.print)
dialog.exec_()

def print(self, printer):
    printer.setResolution(300)
    painter = QPainter()
    painter.begin(printer)
    ...
0 голосов
/ 14 июня 2011

Добавьте QPageSetupDialog для отображения перед предварительным просмотром.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...