首页 > 解决方案 > 如何制作半透明颜色的 QGraphicsItem?

问题描述

我正在开发一个 QT GUI,它通过各种形状从图形视图中注释图片,目前正在开发最简单的一个矩形。按下按钮后,我设法向图像添加了一个矩形,并使用 setFlag 函数移动它。我现在需要做的是确保矩形是半透明的,以便用户可以看到确切注释的内容。我的矩形按钮代码:

void MainWindow::on_pushButton_11_clicked()  // rectangle shape creator
{
    QBrush redBrush(Qt::red);
    QBrush blueBrush(Qt::blue);
    QPen blackpen(Qt::black);
    blackpen.setWidth(3);
    rectangle = scene->addRect(-100,-100,50,50,blackpen,blueBrush);
    rectangle->setFlag(QGraphicsItem::ItemIsMovable);
}

我研究了 Qt 文档,发现 QGraphicsItem 库中的 opacity 函数可能是解决这个问题的方法,但我找不到实现它的方法。任何帮助或建议都非常感谢。

标签: c++qtqgraphicsitem

解决方案


有几种解决方案:

  • 使用setOpacity()使项目在填充和边框颜色中透明的方法。

    rectangle->setOpacity(.2);
    
  • 如果要设置填充颜色的透明度,则必须为 QBrush 设置一个透明的 QColor。

    QColor brush_color(Qt::blue);
    brush_color.setAlpha(50);
    QPen blackpen(Qt::black);
    blackpen.setWidth(3);
    rectangle = scene->addRect(-100, -100, 50, 50, blackpen, brush_color);
    rectangle->setFlag(QGraphicsItem::ItemIsMovable);
    
  • 如果要在边框处设置透明度,则必须为 QBrush 设置透明的 QColor。

    QBrush blueBrush(Qt::blue);
    QColor black_color(Qt::black);
    black_color.setAlpha(50);
    QPen blackpen(black_color);
    blackpen.setWidth(3);
    rectangle = scene->addRect(-100, -100, 50, 50, blackpen, blueBrush);
    rectangle->setFlag(QGraphicsItem::ItemIsMovable);
    

推荐阅读