Russian Qt Forum
Май 05, 2024, 22:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Создание накладной средствами Qt  (Прочитано 41922 раз)
phpCoder
Гость
« : Август 09, 2015, 21:55 »

Добрый вечер.
Получится ли создать накладную без костылей, бубной и прочего с помощью классов QText[....]? Может кто-то подобное делал. Сейчас у меня это делается через HTML+CSS. Вид накладной на картинке. Также интересует перенос части таблицы на другую страницу.
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #1 : Август 09, 2015, 22:11 »

Добрый!

Просто не получится. Я рисую прямо на принтер. HTML+CSS не смог приручить.
Записан
phpCoder
Гость
« Ответ #2 : Август 09, 2015, 22:29 »

Ну да, создать QTextDocument. В нем произвести все действия, далее создать принтер - указать PDF формат и название файла. Далее печать.

С помошью классов QText[...] все-таки можно сделать? Такую вот табличку нарисовать, подчеркивания и т.д.?
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #3 : Август 09, 2015, 22:34 »

Может и можно. Я делаю по другому, через QPainter рисую сразу на QPrinter (drawLine, drawText).
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Август 09, 2015, 22:46 »

Ну да, создать QTextDocument. В нем произвести все действия, далее создать принтер - указать PDF формат и название файла. Далее печать.

С помошью классов QText[...] все-таки можно сделать? Такую вот табличку нарисовать, подчеркивания и т.д.?

QTextEdit ведь поддерживает html, вот и сделаете на html табличку
Записан

phpCoder
Гость
« Ответ #5 : Август 09, 2015, 23:08 »

Это свойство поддерживает: border-collapse: collapse;?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #6 : Август 10, 2015, 00:00 »

Это свойство поддерживает: border-collapse: collapse;?

думаю, да

но если QTextEdit не прокатит, есть QWebView -- он не только html+css покажет, но и js выполнит )
Записан

kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #7 : Август 10, 2015, 15:34 »

А вот с границами таблицы облом выйдет. Невозможно средствами QTextEdit задать разную толщину для разных ячеек ((
Записан
Nidxogg
Гость
« Ответ #8 : Август 10, 2015, 16:59 »

QActiveX как вариант и запилить форму в Word
P.S. Саму форму можно как создавать самому, так и сделать в форме шаблона. Создавать документ на основе этого шаблона и программно вбивать значение полей , добавлять строки и т.д
« Последнее редактирование: Август 10, 2015, 17:02 от Nidxogg » Записан
phpCoder
Гость
« Ответ #9 : Август 10, 2015, 22:58 »

Я сейчас через QWebPage делаю. Вставляю в нею html-код и на печать в ПДФ файл. Только вот вопрос: а тут тогда изображение вставить? У меня все изображения в ресурсах хранятся. Может можно как-нибудь в тег IMG записать путь к изображению как-то так - :/images/myimage.png? Что QWebPage его отобразил.
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #10 : Август 11, 2015, 08:39 »

Я сейчас через QWebPage делаю. Вставляю в нею html-код и на печать в ПДФ файл. Только вот вопрос: а тут тогда изображение вставить? У меня все изображения в ресурсах хранятся. Может можно как-нибудь в тег IMG записать путь к изображению как-то так - :/images/myimage.png? Что QWebPage его отобразил.
Попробуйте встраивать картинки через data.
В base64 Qt перегонять умеет.
Записан
phpCoder
Гость
« Ответ #11 : Август 11, 2015, 10:37 »

Ура, добил изображения.
Значит действовать можно двумя путями:
1. Использоваться встроенное изображение (embedded image), кодированное базой. Пример:
Код
C++ (Qt)
out << "<img src=\"data:image/png;base64," << QByteArray(imagePngBin).toBase64() << "\" />"
2. Использовать изображения из ресурсов:
Код
C++ (Qt)
out << "<img src=\"qrc:/путь к изображению\" />"
Записан
phpCoder
Гость
« Ответ #12 : Август 11, 2015, 10:40 »

И главное. В QWebPage при использовании метода setHtml() необходимо использовать сигнал loadFinished, иначе изображения в результирующем файле не появится - не успеет загрузиться.
Записан
phpCoder
Гость
« Ответ #13 : Август 11, 2015, 22:33 »

Сейчас столкнулся с проблемой:
Код
C++ (Qt)
QWebPage page; QEventLoop loop;
connect(&page, &QWebPage::loadFinished, &loop, &QEventLoop::quit);
page.mainFrame()->setHtml(html);
loop.exec();
page.mainFrame()->print(&printer);

Когда этот кусок выполняется в первый раз, то печать идет. Когда я нажимаю на кнопку второй раз, то приложение начинает бесконечно долго думать и печати нет. Приходится закрывать приложение и включать его заново.
Как показывает отладочная печать тупить оно начинает на строке
Код:
loop.exec();
Вопрос: какая принципиальная разница между первым проходом и вторым? Почему при первом проходе все хорошо, а при втором нет? Объекты все временные, после окончания работы функции, где записан этот кусок кода, они уничтожаются.
Записан
Bepec
Гость
« Ответ #14 : Август 11, 2015, 22:47 »

Как вариант происходит кеширование, оно там есть и автоматом вроде включено. Так что установив во второй раз тот же html вы вполне можете получить loadFinished ДО connect Улыбающийся

PS это конечно догадка, но проблема в том что loadFinished уже пришел до коннекта.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.155 секунд. Запросов: 23.