@@ -105,6 +105,7 @@ QgsComposer::QgsComposer( QgisApp *qgis, const QString& title )
105
105
: QMainWindow()
106
106
, mTitle( title )
107
107
, mQgis( qgis )
108
+ , mPrinter( 0 )
108
109
, mUndoView( 0 )
109
110
, mAtlasFeatureAction( 0 )
110
111
{
@@ -645,6 +646,7 @@ QgsComposer::QgsComposer( QgisApp *qgis, const QString& title )
645
646
QgsComposer::~QgsComposer ()
646
647
{
647
648
deleteItemWidgets ();
649
+ delete mPrinter ;
648
650
}
649
651
650
652
void QgsComposer::setupTheme ()
@@ -1701,7 +1703,7 @@ void QgsComposer::printComposition( QgsComposer::OutputMode mode )
1701
1703
}
1702
1704
1703
1705
// orientation and page size are already set to QPrinter in the page setup dialog
1704
- QPrintDialog printDialog ( & mPrinter , 0 );
1706
+ QPrintDialog printDialog ( printer () , 0 );
1705
1707
if ( printDialog.exec () != QDialog::Accepted )
1706
1708
{
1707
1709
return ;
@@ -1713,15 +1715,15 @@ void QgsComposer::printComposition( QgsComposer::OutputMode mode )
1713
1715
QgsAtlasComposition* atlasMap = &mComposition ->atlasComposition ();
1714
1716
if ( mode == QgsComposer::Single )
1715
1717
{
1716
- mComposition ->print ( mPrinter , true );
1718
+ mComposition ->print ( * printer () , true );
1717
1719
}
1718
1720
else
1719
1721
{
1720
1722
// prepare for first feature, so that we know paper size to begin with
1721
1723
atlasMap->prepareForFeature ( 0 );
1722
1724
1723
- mComposition ->beginPrint ( mPrinter , true );
1724
- QPainter painter ( & mPrinter );
1725
+ mComposition ->beginPrint ( * printer () , true );
1726
+ QPainter painter ( printer () );
1725
1727
1726
1728
loadAtlasPredefinedScalesFromProject ();
1727
1729
if ( ! atlasMap->beginRender () && !atlasMap->featureFilterErrorString ().isEmpty () )
@@ -1759,7 +1761,7 @@ void QgsComposer::printComposition( QgsComposer::OutputMode mode )
1759
1761
}
1760
1762
1761
1763
// start print on a new page if we're not on the first feature
1762
- mComposition ->doPrint ( mPrinter , painter, i > 0 );
1764
+ mComposition ->doPrint ( * printer () , painter, i > 0 );
1763
1765
}
1764
1766
atlasMap->endRender ();
1765
1767
painter.end ();
@@ -3556,7 +3558,7 @@ void QgsComposer::on_mActionPageSetup_triggered()
3556
3558
return ;
3557
3559
}
3558
3560
3559
- QPageSetupDialog pageSetupDialog ( & mPrinter , this );
3561
+ QPageSetupDialog pageSetupDialog ( printer () , this );
3560
3562
pageSetupDialog.exec ();
3561
3563
}
3562
3564
@@ -3726,11 +3728,11 @@ void QgsComposer::setPrinterPageOrientation( QString orientation )
3726
3728
{
3727
3729
if ( orientation == tr ( " Landscape" ) )
3728
3730
{
3729
- mPrinter . setOrientation ( QPrinter::Landscape );
3731
+ printer ()-> setOrientation ( QPrinter::Landscape );
3730
3732
}
3731
3733
else
3732
3734
{
3733
- mPrinter . setOrientation ( QPrinter::Portrait );
3735
+ printer ()-> setOrientation ( QPrinter::Portrait );
3734
3736
}
3735
3737
}
3736
3738
@@ -3742,11 +3744,11 @@ void QgsComposer::setPrinterPageDefaults()
3742
3744
// set printer page orientation
3743
3745
if ( paperWidth > paperHeight )
3744
3746
{
3745
- mPrinter . setOrientation ( QPrinter::Landscape );
3747
+ printer ()-> setOrientation ( QPrinter::Landscape );
3746
3748
}
3747
3749
else
3748
3750
{
3749
- mPrinter . setOrientation ( QPrinter::Portrait );
3751
+ printer ()-> setOrientation ( QPrinter::Portrait );
3750
3752
}
3751
3753
}
3752
3754
@@ -3799,3 +3801,13 @@ void QgsComposer::loadAtlasPredefinedScalesFromProject()
3799
3801
atlasMap.setPredefinedScales ( pScales );
3800
3802
}
3801
3803
3804
+ QPrinter *QgsComposer::printer ()
3805
+ {
3806
+ // only create the printer on demand - creating a printer object can be very slow
3807
+ // due to QTBUG-3033
3808
+ if ( !mPrinter )
3809
+ mPrinter = new QPrinter ();
3810
+
3811
+ return mPrinter ;
3812
+ }
3813
+
0 commit comments