[Qt-interest] Creating a QPaintEngine

Tony Rietwyk tony.rietwyk at rightsoft.com.au
Sat Jul 24 05:18:02 CEST 2010


Hi Everybody, 

How do I create a QPaintEngine decendent?  The following compiles and works on WinXP with Visual Studio 2008 and qmake'd projects.  On Mac OS X 10.5 with qmake'd XCode projects, it can't find private/qpaintengine.h.  

Is there a more correct way of doing this?  

The use case is to output a CSV file containing the text written from the third-party NCReport components. 

The code below was extracted from the .cpp file: 


#include <QApplication>
#include <QFile>
#include <QHash>
#include <QPaintDevice>
#include <QPaintEngine>
#include <QTextCodec>
#include <QTextStream>
#include <QtDebug>

#include "private/qpaintengine_p.h"

class TTextOutputEnginePrivate : public QPaintEnginePrivate
{
public:
    // Various extra fields...
};

static inline QPaintEngine::PaintEngineFeatures textOutputEngineFeatures()
{
    return QPaintEngine::PaintEngineFeatures(
        QPaintEngine::AllFeatures
        & ~QPaintEngine::PatternBrush
        & ~QPaintEngine::PerspectiveTransform
        & ~QPaintEngine::ConicalGradientFill
        & ~QPaintEngine::PorterDuff);
}

class TTextOutputEngine : public QPaintEngine
{
    Q_DECLARE_PRIVATE(TTextOutputEngine)

public:
    TTextOutputEngine()
        : QPaintEngine(*new TTextOutputEnginePrivate,
                       textOutputEngineFeatures())
    {
    }

    bool begin(QPaintDevice *device);
    bool end();

    void updateState(const QPaintEngineState &state);

    void drawTextItem(const QPointF &pt, const QTextItem &item);

    QPaintEngine::Type type() const { return QPaintEngine::User; }

	void newPage();
};


Thanks, 

Tony.






More information about the Qt-interest-old mailing list