Qt利用QGraphicsScene编写Word排版工具导出PDF

本篇的目的是编写一个工具,能够方便的对富文本、表格、图片生成Report和导出PDF,并且必须要在ARM、MIPS平台的linux嵌入式系统中方便使用。

自定义Graphics图形系统

Graphic系统,可以良好的完成图形的编辑工作和显示工作,但是在嵌入式板子上并不能良好的工作,因为内部绘图机制在嵌入式屏幕上存在很大的失真问题。

QTEGraphicsItem

QTEGraphicsItem.h

#ifndef QTEGRAPHICSITEM_H
#define QTEGRAPHICSITEM_H

#include <QGraphicsItem>
#include <QGraphicsProxyWidget>

class QTEGraphicsItem : public QGraphicsItem
{
public:
    explicit QTEGraphicsItem(QTEGraphicsItem *parent = 0);

};

class QTEGraphicsTextItem : public QGraphicsTextItem
{
public:
    explicit QTEGraphicsTextItem(QTEGraphicsItem *parent = 0);


    // QGraphicsItem interface
public:
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
};


class QTEGraphicsSimpleTextItem : public QGraphicsSimpleTextItem
{
public:
    explicit QTEGraphicsSimpleTextItem(QTEGraphicsItem *parent = 0);

};


class QTEGraphicsPixmapItem : public QGraphicsPixmapItem
{
public:
    explicit QTEGraphicsPixmapItem(QTEGraphicsItem *parent = 0);

};

class QTEGraphicsRectItem : public QGraphicsRectItem
{
public:
    explicit QTEGraphicsRectItem(QTEGraphicsItem *parent = 0);


    // QGraphicsItem interface
public:
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
};


class QTEGraphicsLineItem : public QGraphicsLineItem
{
public:
    explicit QTEGraphicsLineItem(QTEGraphicsItem *parent = 0);


    // QGraphicsItem interface
public:
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
};




class QTEGraphicsPathItem : public QGraphicsPathItem
{
public:
    explicit QTEGraphicsPathItem(QTEGraphicsItem *parent = 0);

};


class QTEGraphicsEllipseItem : public QGraphicsEllipseItem
{
public:
    explicit QTEGraphicsEllipseItem(QTEGraphicsItem *parent = 0);

};


class QTEGraphicsPolygonItem : public QGraphicsPolygonItem
{
public:
    explicit QTEGraphicsPolygonItem(QTEGraphicsItem *parent = 0);

};

class QTEGraphicsItemGroup : public QGraphicsItemGroup
{
public:
    explicit QTEGraphicsItemGroup(QTEGraphicsItem *parent = 0);

};

class QTEGraphicsProxyWidget : public QGraphicsProxyWidget
{
public:
    explicit QTEGraphicsProxyWidget(QTEGraphicsItem *parent = 0);

};


#endif // QTEGRAPHICSITEM_H

QTEGraphicsItem.cpp

#include "hngraphicsitem.h"
#include <QPainter>
#include <QStyleOptionGraphicsItem>
#include "QTEDefine.h"

QTEGraphicsItem::QTEGraphicsItem(QTEGraphicsItem *parent) : QGraphicsItem(parent) {}


QTEGraphicsTextItem::QTEGraphicsTextItem(QTEGraphicsItem *parent) : QGraphicsTextItem(parent) {}


QTEGraphicsRectItem::QTEGraphicsRectItem(QTEGraphicsItem *parent) : QGraphicsRectItem(parent) {}


QTEGraphicsSimpleTextItem::QTEGraphicsSimpleTextItem(QTEGraphicsItem *parent) : QGraphicsSimpleTextItem(parent) {}


QTEGraphicsLineItem::QTEGraphicsLineItem(QTEGraphicsItem *parent) : QGraphicsLineItem(parent) {}


QTEGraphicsPixmapItem::QTEGraphicsPixmapItem(QTEGraphicsItem *parent) : QGraphicsPixmapItem(parent) {}


QTEGraphicsPathItem::QTEGraphicsPathItem(QTEGraphicsItem *parent) : QGraphicsPathItem(parent) {}


QTEGraphicsEllipseItem::QTEGraphicsEllipseItem(QTEGraphicsItem *parent) : QGraphicsEllipseItem(parent) {}


QTEGraphicsPolygonItem::QTEGraphicsPolygonItem(QTEGraphicsItem *parent) : QGraphicsPolygonItem(parent) {}


QTEGraphicsItemGroup::QTEGraphicsItemGroup(QTEGraphicsItem *parent) : QGraphicsItemGroup(parent) {}


QTEGraphicsProxyWidget::QTEGraphicsProxyWidget(QTEGraphicsItem *parent) : QGraphicsProxyWidget(parent) {}


void QTEGraphicsTextItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    QFont oldFont(painter->font());

    painter->setFont(font());
    //painter->fillRect(option->rect, Qt::SolidPattern);
    painter->drawText(option->rect, Qt::AlignCenter, toPlainText());

    if (option->state & (QStyle::State_Selected | QStyle::State_HasFocus))
        ;

    if(toPlainText().contains("K1160"))
    {
        pline() << font().pointSize() << font().pixelSize();
        pline() << pos() << option->rect << option->exposedRect << toPlainText();
        pline() << option->matrix << option->matrix.mapRect(option->rect);
    }
    painter->setFont(oldFont);
}


void QTEGraphicsLineItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    QPen oldPen(painter->pen());

    qreal xratio = option->rect.width() / option->exposedRect.width();
    qreal yratio = option->rect.height() / option->exposedRect.height();

    QPen pn = pen();
    pn.setWidth(pn.width()*xratio);
    painter->setPen(pn);

    QLineF l = QLineF(option->rect.left(), option->rect.top(),
                          option->rect.right(), option->rect.top());

    painter->drawLine(l);
    if(0)
    {
        pline() << line() << l << option->rect << option->exposedRect;
        pline() << option->matrix << option->matrix.mapRect(option->rect);
    }

    painter->setPen(oldPen);
}


void QTEGraphicsRectItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    QPen oldPen(painter->pen());
    QBrush oldBrush(painter->brush());

    qreal xratio = option->rect.width() / option->exposedRect.width();
    qreal yratio = option->rect.height() / option->exposedRect.height();

    QPen pn = pen();
    pn.setWidth(pn.width()*xratio);
    painter->setPen(pn);

    QRectF r = QRectF(option->rect.left(), option->rect.top(),
                          option->rect.width(), option->rect.height());

    painter->setBrush(brush());
    painter->drawRect(r);

    if(0)
    {
        pline() << option->matrix << option->matrix.mapRect(option->rect) << r;
    }

    painter->setPen(oldPen);
    painter->setBrush(oldBrush);
}

QTEGraphicsScene

QTEGraphicsScene.h

#ifndef QTEGRAPHICSSCENE_H
#define QTEGRAPHICSSCENE_H

#include <QGraphicsScene>
#include "hngraphicsitem.h"

class QTEGraphicsScene : public QGraphicsScene
{
    Q_OBJECT
public:
    QTEGraphicsScene(QObject *parent = 0);
    QTEGraphicsScene(const QRectF &sceneRect, QObject *parent = 0);
    QTEGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject *parent = 0);
    virtual ~QTEGraphicsScene() {}

    void render(QPainter *painter,
                const QRectF &target = QRectF(), const QRectF &source = QRectF(),
                Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio);
    QTEGraphicsEllipseItem *addEllipse(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush 
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值