【问题标题】:QFrame round border transparent backgroundQFrame圆形边框透明背景
【发布时间】:2020-07-07 23:00:12
【问题描述】:

我正在使用 QFrame 创建一个圆形上下文菜单。为了制作圆角,我使用了 Qt 样式表。这是我的 CSS

    this->setStyleSheet("QFrame#ShareContextMenu{background-color:rgb(255,255,255);
    border-width:1px;
    border-color :rgb(0,0,0);
    border-radius:10px;
    border-style:solid;}

    QPushButton{background-color:rgba(255,255,255,0);}
    QPushButton::hover{background-color:rgba(125,125,125,50); border-radius:5px;}");

如何去除这张图片中标有红色圆圈的白色背景?

编辑:

这是使用 QWidget::setMask() 的解决方案。在构造函数中添加以下代码

    QPixmap px(this->size()); //Create pixmap with the same size of current widget
    px.fill(Qt::transparent); //Fill transparent
    QPainter p(&px);
    QBrush brush;
    brush.setStyle(Qt::SolidPattern); //For fill
    p.setBrush(brush);
    p.drawRoundedRect(this->rect(), 15.0, 15.0); //Draw filled rounded rectangle on pixmap
    this->setMask(px.mask()); //The the mask for current widget.

【问题讨论】:

  • 上下文菜单框是由图像生成或组成的吗?如果它是使用图像制作的,则只需使用具有透明度的图像作为角落。
  • 上下文菜单框是用 QFrame 创建的,我不使用任何图像。
  • 好的,like this 没有帮助?
  • 你能分享一下QFrame的CSS吗?
  • @AlexanderSorokin:添加了 CSS。

标签: qt transparent qwidget qtstylesheets qframe


【解决方案1】:

我认为您无法使用样式表解决问题。 QMenu 是一个矩形的顶级小部件。

this 是你的QMenu 吗?如果是这样,试试这个:

this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);

this 替换为您的实例化QMenu 对象。

当然,您也可以使用setMask 隐藏所需区域。例如:

QRegion region (menu->x(),
                menu->y(),
                menu->sizeHint().width(),
                menu->sizeHint().height(),
                QRegion::Ellipse);
menu->setMask(region);

【讨论】:

  • 谢谢。我现在不使用 QMenu。 setMask 方法对我有用。
  • @sng 太棒了! :) 编码快乐! :)
猜你喜欢
  • 2016-02-20
  • 1970-01-01
  • 2020-11-12
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
相关资源
最近更新 更多