Lazy Initialize QPrinter

it was taking 3 - 4 secs here to open the print dialog,
first I tought it was a bug in our side, but it looks like
it's a Qt bug, and by lazy initializing it we don't actually
solve this, since it will still take 3 - 4 secs for the printer
to start, but the dialog will appear much quicker.

Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Tomaz Canabrava 2016-01-07 19:33:58 -02:00 committed by Dirk Hohndel
parent 25aa80846b
commit 19dee335e4
2 changed files with 28 additions and 8 deletions

View file

@ -14,7 +14,10 @@
template_options::color_palette_struct ssrf_colors, almond_colors, blueshades_colors, custom_colors;
PrintDialog::PrintDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f)
PrintDialog::PrintDialog(QWidget *parent, Qt::WindowFlags f) :
QDialog(parent, f),
printer(NULL),
qprinter(NULL)
{
// initialize const colors
ssrf_colors.color1 = QColor::fromRgb(0xff, 0xff, 0xff);
@ -57,7 +60,6 @@ PrintDialog::PrintDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f
printOptions.color_selected = s.value("color_selected").toBool();
printOptions.landscape = s.value("landscape").toBool();
printOptions.p_template = s.value("template_selected").toString();
qprinter.setOrientation((QPrinter::Orientation)printOptions.landscape);
templateOptions.font_index = s.value("font").toInt();
templateOptions.font_size = s.value("font_size").toDouble();
templateOptions.color_palette_index = s.value("color_palette").toInt();
@ -95,9 +97,6 @@ PrintDialog::PrintDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f
// create a print options object and pass our options struct
optionsWidget = new PrintOptions(this, &printOptions, &templateOptions);
// create a new printer object
printer = new Printer(&qprinter, &printOptions, &templateOptions, Printer::PRINT);
QVBoxLayout *layout = new QVBoxLayout(this);
setLayout(layout);
@ -140,6 +139,12 @@ PrintDialog::PrintDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f
connect(this, SIGNAL(finished(int)), this, SLOT(onFinished()));
}
PrintDialog::~PrintDialog()
{
delete qprinter;
delete printer;
}
void PrintDialog::onFinished()
{
QSettings s;
@ -165,9 +170,20 @@ void PrintDialog::onFinished()
s.setValue("custom_color_5", custom_colors.color5.name());
}
void PrintDialog::createPrinterObj()
{
// create a new printer object
if (!printer) {
qprinter = new QPrinter();
qprinter->setOrientation((QPrinter::Orientation)printOptions.landscape);
printer = new Printer(qprinter, &printOptions, &templateOptions, Printer::PRINT);
}
}
void PrintDialog::previewClicked(void)
{
QPrintPreviewDialog previewDialog(&qprinter, this, Qt::Window
createPrinterObj();
QPrintPreviewDialog previewDialog(qprinter, this, Qt::Window
| Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint
| Qt::WindowTitleHint);
connect(&previewDialog, SIGNAL(paintRequested(QPrinter *)), this, SLOT(onPaintRequested(QPrinter *)));
@ -176,7 +192,8 @@ void PrintDialog::previewClicked(void)
void PrintDialog::printClicked(void)
{
QPrintDialog printDialog(&qprinter, this);
createPrinterObj();
QPrintDialog printDialog(qprinter, this);
if (printDialog.exec() == QDialog::Accepted) {
connect(printer, SIGNAL(progessUpdated(int)), progressBar, SLOT(setValue(int)));
printer->print();
@ -186,6 +203,7 @@ void PrintDialog::printClicked(void)
void PrintDialog::onPaintRequested(QPrinter *printerPtr)
{
createPrinterObj();
connect(printer, SIGNAL(progessUpdated(int)), progressBar, SLOT(setValue(int)));
printer->print();
progressBar->setValue(0);

View file

@ -18,12 +18,13 @@ class PrintDialog : public QDialog {
public:
explicit PrintDialog(QWidget *parent = 0, Qt::WindowFlags f = 0);
virtual ~PrintDialog();
private:
PrintOptions *optionsWidget;
QProgressBar *progressBar;
Printer *printer;
QPrinter qprinter;
QPrinter *qprinter;
struct print_options printOptions;
struct template_options templateOptions;
@ -33,6 +34,7 @@ slots:
void previewClicked();
void printClicked();
void onPaintRequested(QPrinter *);
void createPrinterObj();
};
#endif
#endif // PRINTDIALOG_H