在Qt中绘制一条多色线

时间:2012-02-03 14:12:15

标签: qt qgraphicsitem

我想要实现的目标如下:我有一个显示QGraphicsScene的{​​{1}}。像素图有多种颜色,我需要在像素图上绘制一条线,必须在每一点都可见并且可识别。

我的想法是绘制一条线,其中每个像素都具有像素图的相对像素的负(互补)颜色。所以我考虑了继承QGraphicsPixmapItem并重新实现QGraphicsItem方法来绘制多色线。

但是我被卡住了,因为我不知道如何从paint()函数中检索像素图的像素信息,即使我发现了,我也想不出一种方法来绘制以这种方式排队。

你能否就如何继续提供一些建议?

1 个答案:

答案 0 :(得分:12)

您可以使用QPainter的{​​{3}}属性轻松地执行此类操作,而无需读取源像素颜色。

带有自定义QWidget实现的简单示例paintEvent,您应该能够适应项目的paint方法:

#include <QtGui>

class W: public QWidget {
    Q_OBJECT

    public:
        W(QWidget *parent = 0): QWidget(parent) {};

    protected:
        void paintEvent(QPaintEvent *) {
            QPainter p(this);

            // Draw boring background
            p.setPen(Qt::NoPen);
            p.setBrush(QColor(0,255,0));
            p.drawRect(0, 0, 30, 90);
            p.setBrush(QColor(255,0,0));
            p.drawRect(30, 0, 30, 90);
            p.setBrush(QColor(0,0,255));
            p.drawRect(60, 0, 30, 90);

            // This is the important part you'll want to play with
            p.setCompositionMode(QPainter::RasterOp_SourceAndNotDestination);
            QPen inverter(Qt::white);
            inverter.setWidth(10);
            p.setPen(inverter);
            p.drawLine(0, 0, 90, 90);
        }
};

这将输出类似下图的图像:

Fat inverted line over funky colors

尝试其他compositionMode以获得更有趣的效果。