Russian Qt Forum

Qt => Печать => Тема начата: INZER от Июнь 19, 2015, 12:25



Название: Печать таблицы
Отправлено: INZER от Июнь 19, 2015, 12:25
Необходимо отправить на печать таблицу. Прочитав книгу Бланшета решил что самым удобным будет сформировать HTML и затем отправить на печать с применением класса QTextDocument.

Код:
void MainWindow::printTable()
{
    QString html;
    html = "<table width=\"100%\" border=1 cellspacing=0>\n ";

                        ...............

    html += "</table>\n";
    printHTML(html);
}

void MainWindow::printHTML(const QString &html)
{
    QPrinter printer;
    QPrintDialog printDialog (&printer,this);
    if (printDialog.exec())
    {
        QPainter painter (&printer);
        QTextDocument textDocument;
        textDocument.setHtml(html);
        textDocument.print(&printer);
    }
}

После выполнения данного кода на печать ничего не уходит и появляется следующая ошибка:
QPainter::begin: A paint device can only be painted by one painter at a time.

В какую сторону двигаться? Что происходит? Натолкните на мысль.
Спасибо.

PS: Сформированный html корректно отображается в QTextEdit
(http://s017.radikal.ru/i429/1506/cf/ee119bf1eda4.png)


Название: Re: Печать таблицы
Отправлено: GreatSnake от Июнь 19, 2015, 13:19
Код
C++ (Qt)
QPainter painter (&printer);
Ну дык, а зачем нужна эта строчка?


Название: Re: Печать таблицы
Отправлено: INZER от Июнь 19, 2015, 13:35

полностью скопировал с книги Бланшета.
Заработало. Спасибо!  :)


Название: Re: Печать таблицы
Отправлено: dmr от Июнь 22, 2015, 15:34
Попробуй распечатать не ->print(&printer), а ->drawContents(&painter). У меня так стало работать и быстро и хорошо, а то до того печаталась только 1-я страница из нескольких, притормаживало и поля съезжали.