crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> PrintPreview
Anticross
  опции профиля:
сообщение 16.9.2010, 9:15
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 22
Регистрация: 31.3.2010
Пользователь №: 1579

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть главный виджет приложения у которого есть функция print, выглядящая следующи образом:
Раскрывающийся текст
void print(QPrinter * printer) {
    QPainter painter;
    
    painter.begin(printer);

    QFont norm("Courier New", 8, QFont::Normal);
    QFont bold("Courier New", 8, QFont::Normal);
    
    painter.setFont(QFont("Times", 10, QFont::Normal));
    painter.drawText(20, 20, tr("Events Log generated ") +
        QDate::currentDate().toString("dd.MM.yyyy") + tr(" at ") + QTime::currentTime().toString("hh:mm:ss") + "\n" + "\n");
    
    QList<int> maxStrList;

   m_model->getColumnsMaxLength(maxStrList);

    int x = 50, y = 60;

    for(int i = 0; i<m_model->rowCount(); i++)
    {
        if(i != 0)
        {
            y = y+20;
            x = 50;
        }

        for(int j = 0; j<m_model->columnCount(); j++)
        {
            if(j == 0)
                painter.setFont(norm);
            else
                painter.setFont(bold);
            
             if(y > printer->pageRect().height())
            {
                 printer->newPage();
                y = 60;
                painter.setFont(QFont("Times", 10, QFont::Normal));
                painter.drawText(20,20,tr("Error Log generated ") + QDate::currentDate().toString("dd.MM.yyyy") + tr(" at ") + QTime::currentTime().toString("hh:mm:ss") + "\n" + "\n");
            }

            if(m_model->getEventItem(i).getValue(j).isEmpty() == false)
            {
                QString dataStr = calclulateSpacing(m_model->getEventItem(i).getValue(j),maxStrList.at(j));

                dataStr = dataStr.trimmed();

                if(x + (dataStr.size()*8) > printer->pageRect().width())
                {
                    x = printer->pageRect().width() - dataStr.size()*8;
                    y = y + 20;
                }
                painter.drawText(x,y, dataStr);
                x = x+(dataStr.size()*8);
            }
        }
    }

    painter.end();
    
}

При ее вызове информация идет на печать. Функция вызывается от сюда:
void onPrint() {
    QPrinter printer;
    if (QPrintDialog(&printer, this).exec() == QDialog::Accepted)
        print(&printer);
}

Вопрос в следующий :
Как можно предварительно вывести печатаемую информацию на экран, а после уже на принтер.
Пытался вызывать функцию print и передавать в нее в качестве параметра пустой виджет, не отобразилось. Нашел два класса QPrintPreviewDialog и QPrintPreviewWidget, но что дальше делать не соображу. Подскажите пжлст или дайте пример. Заранее спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 23.4.2024, 14:59