Russian Qt Forum

Qt => Печать => Тема начата: alex7annet от Июль 20, 2011, 16:28



Название: QPrintPreviewDialog печатает пустые листы
Отправлено: 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)


Название: Re: QPrintPreviewDialog печатает пустые листы
Отправлено: sergun1604 от Июль 21, 2011, 15:33
Переходи на Линукс!!!


Название: Re: QPrintPreviewDialog печатает пустые листы
Отправлено: mishabard от Июль 21, 2011, 15:39
Сейчас как раз пытаюсь решить ту же проблему. Под Линксом тоже самое. У меня HTML страница примерно на три листа, так в предварительном просмотре появлется возможность перейти на все три листа, но 2 и 3 пустые.


Название: Re: QPrintPreviewDialog печатает пустые листы
Отправлено: alex7annet от Июль 21, 2011, 18:53
Ну я уже на Линуксе, просто прогу нужно сделать именно для Windows. У меня в линуксе тоже не отображаются на предварительном просмотре все листы кроме первого, скорее всего дело в драйвере или в иксах, т.к. в Windows хоть и печатает пустые листы, но на предварительном просмотре все отлично. Сейчас скомпилировал qt ничего не отключая - попробую отпишусь)


Название: Re: QPrintPreviewDialog печатает пустые листы
Отправлено: alex7annet от Июль 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>") все равно не печатается.


Название: Re: QPrintPreviewDialog печатает пустые листы
Отправлено: alex7annet от Июль 24, 2011, 12:42
Проблема решилась.

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

https://bugreports.qt.nokia.com/browse/QTBUG-17987 (https://bugreports.qt.nokia.com/browse/QTBUG-17987)


Название: Re: QPrintPreviewDialog печатает пустые листы
Отправлено: mishabard от Июль 25, 2011, 09:37
Спасибо! попробую его под линуксом. может предварительный просмотр всех страниц появиться, а не только первой)))))


Название: Re: QPrintPreviewDialog печатает пустые листы
Отправлено: alex7annet от Июль 25, 2011, 10:20
Вряд ли.

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

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

В общем поищу как отладить эту багу, если найду то напишу)


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

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

Но там рекомендуют либо откатиться на 4.7.1, либо дождаться следующей версии.. Проблема только в том, что у меня в gentoo уже нет версии 4.7.1, либо 4.6.3, либо 4.7.2-3  ((


Название: Re: QPrintPreviewDialog печатает пустые листы
Отправлено: alex7annet от Июль 26, 2011, 22:23
Еще один баг - qt игнорирует разрыв страницы: page-break-after/before.

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