Russian Qt Forum

Qt => Печать => Тема начата: sulia от Август 01, 2011, 11:48



Название: долго отображается QPrintPreviewDialog
Отправлено: sulia от Август 01, 2011, 11:48
Добрый день!
Есть код:
Код:
void DialogMain::OnPrintTable()
{
  #ifndef QT_NO_PRINTER
   QPrinter printer;
   printer.setFullPage(false);    
   printer.setOrientation(QPrinter::Landscape);
   QPrintPreviewDialog preview(&printer,this,Qt::WindowMinMaxButtonsHint);   
   preview.setWindowTitle("Перегляд друку "+ this->windowTitle());
   connect(&preview, SIGNAL(paintRequested(QPrinter*)),this, SLOT(printPreview(QPrinter*)));
   preview.exec();
  #endif
}
void DialogMain::printPreview(QPrinter *printer)
{
QString str_html="";
int size = 0;
tablegrChildPoint->CreateHtmlPreview(this->windowTitle(),str_html, size);
#ifndef QT_NO_PRINTER
QTextDocument *doc = new QTextDocument();
doc->setHtml(str_html); 
if(size>=900)
doc->setPageSize(QSizeF(size+10,size+10));
  doc->print(printer);  
#endif
}

Проблема в том, что при первом просмотре печати окно предварительного просмотра отображается долго, потом при повторном отображении быстро, а потом все обратно.
Подскажите пожалуйста в чем проблема.


Название: Re: долго отображается QPrintPreviewDialog
Отправлено: sulia от Август 01, 2011, 13:00
спасибо всем проблема решена)))


Название: Re: долго отображается QPrintPreviewDialog
Отправлено: Пантер от Август 01, 2011, 13:03
Опиши решение.


Название: Re: долго отображается QPrintPreviewDialog
Отправлено: sulia от Август 01, 2011, 13:37
все просто.
В заголовочном файле объявил две динамические переменные
Код:
QPrintPreviewDialog *preview;
QPrinter *printer;


И изменилась функция
Код:
   printer = new QPrinter();     
   preview = new QPrintPreviewDialog(printer,this,Qt::WindowMinMaxButtonsHint);   
   printer->setFullPage(false);    
   printer->setOrientation(QPrinter::Landscape);
   preview->setWindowTitle("Перегляд друку "+ this->windowTitle());
   connect(preview, SIGNAL(paintRequested(QPrinter*)),this, SLOT(printPreview(QPrinter*)));
   preview->exec();
   delete printer;
   delete preview;
Я так понял проблема заключалась с переменными которые создавались на стеке.
Теперь все отлично работает и окно предварительного просмотра выводится моментально.