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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPrintPreviewDialog печатает пустые листы  (Прочитано 10486 раз)
alex7annet
Гость
« : Июль 20, 2011, 16:28 »

Привет всем!! Проблема следующая: не работает вывод на печать. В QPrintPreviewDialog появляется инфа для печати, а печатаются пустые листы. Кто-нибудь сталкивался Непонимающий В линуксе ТОТ ЖЕ САМЫЙ КОД работает без проблем.

Windows XP, MinGW 4.4.0, Qt 4.7.3

Код:
void SalesList::printDoc(const QString &htmlText) {

  QWebView * webView = new QWebView;
  QPrinter * printer = new QPrinter;
  // Настройка формата печати
  printer->setOutputFormat(QPrinter::NativeFormat);
  // По умолчанию ориентация - альбомная
  printer->setOrientation(QPrinter::Landscape);

  QPrintPreviewDialog * previewDlg = new QPrintPreviewDialog(printer, this, Qt::WindowMinMaxButtonsHint);
  connect(previewDlg, SIGNAL(paintRequested(QPrinter *)), webView, SLOT(print(QPrinter*)));

  webView->setHtml(htmlText.toAscii());
  previewDlg->exec();

} //void SalesList::printDoc(const QString &htmlText)
Записан
sergun1604
Гость
« Ответ #1 : Июль 21, 2011, 15:33 »

Переходи на Линукс!!!
Записан
mishabard
Гость
« Ответ #2 : Июль 21, 2011, 15:39 »

Сейчас как раз пытаюсь решить ту же проблему. Под Линксом тоже самое. У меня HTML страница примерно на три листа, так в предварительном просмотре появлется возможность перейти на все три листа, но 2 и 3 пустые.
Записан
alex7annet
Гость
« Ответ #3 : Июль 21, 2011, 18:53 »

Ну я уже на Линуксе, просто прогу нужно сделать именно для Windows. У меня в линуксе тоже не отображаются на предварительном просмотре все листы кроме первого, скорее всего дело в драйвере или в иксах, т.к. в Windows хоть и печатает пустые листы, но на предварительном просмотре все отлично. Сейчас скомпилировал qt ничего не отключая - попробую отпишусь)
Записан
alex7annet
Гость
« Ответ #4 : Июль 23, 2011, 07:55 »

Не  работает все равно. У кого-нибудь вообще работает печать QPrinter+QWebView на Windows. Если да, то с какими параметрами копилили qt и какой код реализует печать.

Уже все перепробовал.

QTextEdit - печатает, QTextDocument - печатает, QWebView - нет. Не могу никак сообразить в чем косяк Непонимающий Ну не вариант рисовать все документы QPainter'ом...

Скорее всего ошибка в самом QT. Т.к. QWebView правильно отображает, но все равно печатает пустой лист. Это не зависит ни от от принтера ни от компьютера, ни от конкретной windows (проверял на xp/7). Сначала я подумал, что может быть дело в сложных CSS, которые дают где-то ошибку, но даже простая страница ("<html><body><p align=center><h1>ЭТО ТЕСТ ДЛЯ ПЕЧАТИ HTML СТРАНИЦЫ</h1></p></body></html>") все равно не печатается.
« Последнее редактирование: Июль 23, 2011, 09:33 от alex7annet » Записан
alex7annet
Гость
« Ответ #5 : Июль 24, 2011, 12:42 »

Проблема решилась.

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

https://bugreports.qt.nokia.com/browse/QTBUG-17987
« Последнее редактирование: Июль 24, 2011, 13:10 от alex7annet » Записан
mishabard
Гость
« Ответ #6 : Июль 25, 2011, 09:37 »

Спасибо! попробую его под линуксом. может предварительный просмотр всех страниц появиться, а не только первой)))))
Записан
alex7annet
Гость
« Ответ #7 : Июль 25, 2011, 10:20 »

Вряд ли.

Во-первых не отображение страниц и их не печать - это разные вещи. Кстати у меня тоже под линухом в предварительном просмотре отображается только первая страница, остальные пустые, хотя печатаются все - я думаю на этот счет стоит тоже поискать на багтрекере, в более ранних версиях qt такого не наблюдалось, скорее всего этот баг возник в версиях 4.7.2-4.7.3, как и пустые страницы, что-то они там с печатью намутили, поэтому в 4.7.4 должны поправить (как мне кажется).

Во-вторых баг помечен как баг под Windows.

В общем поищу как отладить эту багу, если найду то напишу)
« Последнее редактирование: Июль 25, 2011, 10:24 от alex7annet » Записан
alex7annet
Гость
« Ответ #8 : Июль 26, 2011, 10:29 »

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

https://bugreports.qt.nokia.com/browse/QTBUG-17895

Но там рекомендуют либо откатиться на 4.7.1, либо дождаться следующей версии.. Проблема только в том, что у меня в gentoo уже нет версии 4.7.1, либо 4.6.3, либо 4.7.2-3  ((
« Последнее редактирование: Июль 26, 2011, 10:34 от alex7annet » Записан
alex7annet
Гость
« Ответ #9 : Июль 26, 2011, 22:23 »

Еще один баг - qt игнорирует разрыв страницы: page-break-after/before.

Вообще хочу сказать, что qt это конечно круто, но печать ее ОЧЕНЬ слабое место. Я потратил 3 дня чтобы научить свою программу нормально печатать документы, в итоге так и не вышло. Поэтому я потратил еще два часа и реализовал свой предпросмотр печати на основе QWebView, в который я могу добавлять html странички, он их корректно отображает и печатает на Linux/Windows.

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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