Unexpected results with KPrinter and QPaintDeviceMetrics
Michael Goffioul
sw286000 at swing.be
Fri Dec 27 18:51:35 GMT 2002
Due to internal reasons, a synchronization step needs to be done between the
options set in the print dialog, and the internal PS generator (QPrinter).
This
corresponds to KPrinter::preparePrinting (which is protected). However, this
function is automatically called when calling QPainter::begin() on the
KPrinter
object. There's 2 solutions:
1) the normal one:
KPrinter printer;
if (printer.setup())
{
QPainter painter(&printer);
QPaintDeviceMetrics metrics(&printer);
// you should now have the correct values
}
2) solution 1) is only valid if you intend to print something, which is
usually the
case. Indeed, QPainter::end() will send the PS to the selected printer. If
you
want to avoid that, the workaround is to inherits from KPrinter like this:
class MyPrinter : public KPrinter
{
public:
// constructors, and so on
void doPrepare() { preparePrinting(); }
void doFinish() { finishPrinting(); }
}
and then:
MyPrinter printer;
printer.setup();
printer.doPrepare();
QPaintDeviceMetrics metrics(&printer);
// you should have the correct values
I plan to add such utility functions to the KPrinter API and add a mechanism
to avoid such problems, for 3.2.
Bye.
Michael.
More information about the kde-core-devel
mailing list