首页 > 解决方案 > 如何向 QGraphicsLineItem 添加大纲?

问题描述

我想要一个 QGraphicsLineItem ,它由某种颜色勾勒出来。

我试过使用

QGraphicsLineItem::setColor(QColor(...))

然而,这只描绘了内部。

我必须调用什么函数来创建大纲?

更具体地说,假设这是一个普通的 QGraphicsLineItem

--------------------------------------
    10px
    green QGraphicsLineItem
--------------------------------------

我想要的是边界之外完全不同的(纯色)颜色,就像这样,

--------------------------------------
2px blue 
--------------------------------------
10px
green
--------------------------------------
2px blue
--------------------------------------

所以阴影效果不起作用,希望这很清楚。

标签: qtc++11

解决方案


解决方案 1

添加轮廓的一种方法QGraphicsLineItem是使用具有零偏移的QGraphicsDropShadowEffect 。

注意:这种方法不需要子类化,但它不是那么健壮,因为它不允许精确设置刻度并且轮廓不实体。但是,在某些情况下,这可能工作得很好。

以下是如何执行此操作的示例:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    auto *view = new QGraphicsView(this);
    auto *item = new QGraphicsLineItem(50, 50, 250, 150);
    auto *effect = new QGraphicsDropShadowEffect(this);

    effect->setColor(Qt::blue);
    effect->setOffset(0);
    effect->setBlurRadius(10);

    item->setPen(QPen(Qt::green, 10));
    item->setGraphicsEffect(effect);

    view->setScene(new QGraphicsScene(this));
    view->scene()->addItem(item);

    setCentralWidget(view);
    resize(300, 200);
}

此示例产生以下结果:

带有粗绿线和发光蓝色轮廓的窗口


推荐阅读