Печать сложных виджетов в Qt
У меня есть сложный виджет с множеством различных подвиджетов, например, подклассы QLabel. Я хочу напечатать этот виджет, но, очевидно, я не хочу печатать фон, я хочу печатать с разными цветами текста или слегка изменить стиль рамок.
Поскольку я действительно не хочу перебирать все подвиджеты с помощью специальной функции "print", которую мне нужно прикрепить ко всем виджетам (как добавить "print" в QLabel?), Я бы хотел использовать paintEvent.
Если у меня есть иерархия MyWidget -> производная от -> некоторый QWidget, я хотел бы вставить подслой MyWidget -> MyPrintWidget -> некоторый QWidget, где myPrintWidget::paintEvent будет проверять, идет ли текущая печать на экран (таким образом вызовите QWidget::paintEvent), иначе, если мы печатаем на принтере, вместо этого вызовите некоторую функцию MyPrintWidget::drawWidget.
- Это правильный способ включить виджет для печати?
- Как я могу выяснить в paintEvent, что я печатаю на принтере вместо экрана?
- Есть ли хороший пример печати сложных виджетов?
1 ответ
- Это правильный способ включить виджет для печати?
QWidget:: render () отобразит виджет и все его дочерние элементы в QPaintDevice, которым является QPrinter. Для печати все, что вам нужно сделать, это правильно установить таблицу стилей виджетов перед вызовом рендера на устройстве принтера. Вы должны иметь возможность сразу же установить его обратно, если вы повторно используете экранный виджет.
- Как я могу выяснить в paintEvent, что я печатаю на принтере вместо экрана?
Возможно, вы сможете понять это, посмотрев на различные свойства QPaintDevice, но я постараюсь не полагаться на эту функциональность.
- Есть ли хороший пример печати сложных виджетов?
Я не знаю ничего, что делает то, что вы пытаетесь сделать.