Qt Quick 2 - Есть ли (простой) способ распечатать весь контент TableView? - PullRequest
0 голосов
/ 01 апреля 2020

В одном из моих проектов мне нужно распечатать все содержимое TableView, в частности, я хочу напечатать его в файле PDF. Мой TableView содержит пользовательскую модель и делегат элемента. Модель представляет собой класс c ++, но делегат может быть классом qml или c ++, я написал обе реализации. В случае, если для элемента используется класс c ++, он содержит пользовательскую функцию рисования.

Представление, которое я хочу напечатать, - это чат, такой как Telegram, Whatsapp или Skype, который может содержать произвольное количество сообщений. Это означает, что полученный отпечаток может быть разбит на несколько страниц. Каждая страница может также содержать верхний и нижний колонтитулы.

На самом деле я могу получить текст каждого сообщения, и я нашел способ выполнить печать, написав свои собственные функции рисования. Однако это трудная задача, и прежде чем приступить к ее написанию, я хотел убедиться, что я не пропускаю более простой и готовый к использованию способ достижения этого.

Важным моментом является то, что Я не буду использовать Qt Quick Controls 1.x . Я знаю, что они содержат функцию, которая может использоваться для печати их контента, но моя компания решила не использовать их, так как они не поддерживают высокий уровень DPI и представляют серьезные проблемы с производительностью. Могут использоваться только элементы управления 2.0 .

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

Есть важные моменты, которые мне нужно знать:

  1. Есть ли способ перебирать элементы дерева и захватывать их содержимое в изображениях, чтобы напечатать содержимое всего дерева ?
  2. Есть ли способ получить хотя бы свойства, содержащиеся в делегат элемента представления из кода c ++?
  3. Какие наиболее распространенные методы используются при печати TableView или любого другого вида дерева? Я действительно все пишу сам или есть более простой способ добиться этого?
  4. Есть ли другие подходящие компоненты для использования в такой ситуации? Существуют ли даже коммерческие компоненты или компоненты с открытым исходным кодом, которые предоставляют древовидное представление с расширенной поддержкой печати, которое я могу использовать в моем случае?
...