Печать сложных виджетов в Qt - PullRequest
0 голосов
/ 10 июня 2010

У меня сложный виджет с множеством различных подвиджетов, например, подклассы QLabel.Я хочу напечатать этот виджет, но, очевидно, я не хочу печатать фон, я хочу печатать с разными цветами текста или иметь слегка измененный стиль рамок.

Поскольку я действительно не хочу перебиратьвсе подвиджеты со специальной функцией «печать», которые мне нужно было бы прикрепить ко всем виджетам (как добавить «печать» в QLabel?), я хотел бы использовать paintEvent.

Если у меня есть иерархияMyWidget -> производный от -> некоторый QWidget, я хотел бы вставить подслой MyWidget -> MyPrintWidget -> некоторый QWidget, где myPrintWidget :: paintEvent проверит, идет ли текущая печать на экран (таким образом, вызовите QWidget :: paintEvent), иначе, если мы печатаем на принтере, вместо этого вызовите некоторую функцию MyPrintWidget :: drawWidget.

  1. Это правильный способ включить виджет для печати?
  2. Как я могу выяснить в paintEvent, что я печатаю на принтере вместо экрана?
  3. Есть ли хороший пример печати сложных виджетов?

1 Ответ

2 голосов
/ 11 июня 2010
  1. Это правильный способ включить виджет для печати?

QWidget :: render () отобразит виджет и все его дочерние элементы в QPaintDevice , что QPrinter . Для печати все, что вам нужно сделать, это правильно установить таблицу стилей widgets перед вызовом рендеринга на устройстве принтера. Если вы повторно используете экранный виджет, вы сможете сразу же восстановить его.

  1. Как я могу выяснить в paintEvent, что я печатаю на принтере вместо экрана?

Возможно, вы сможете понять это, посмотрев различные свойства QPaintDevice, но я постараюсь не полагаться на эту функциональность.

  1. Есть ли хороший пример печати сложных виджетов?

Я не знаю ничего, что делает то, что вы пытаетесь сделать.

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