首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Qt中绘制多色线条

在Qt中绘制多色线条
EN

Stack Overflow用户
提问于 2012-02-03 22:12:15
回答 1查看 2.8K关注 0票数 4

我想要实现的是:我有一个显示了QGraphicsPixmapItemQGraphicsScene。像素图有多种颜色,我需要在像素图上画一条线,这条线必须在每个单独的点上都是可见和可识别的。

我的想法是绘制一条线,其中每个像素都具有像素图相对像素的负(互补)颜色。因此,我考虑对QGraphicsItem进行子类化,并重新实现paint()方法来绘制一条多色线。

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

你能给我一些关于如何进行的建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-03 22:34:28

您可以使用QPaintercompositionMode属性非常容易地完成类似的操作,而不必读取源像素颜色。

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

代码语言:javascript
复制
#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);
        }
};

这将输出类似以下图像的内容:

使用另一个composition modes进行实验,以获得更有趣的效果。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9129955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档