首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QFrame圆边界透明背景

QFrame圆边界透明背景
EN

Stack Overflow用户
提问于 2015-09-10 00:44:34
回答 1查看 3.7K关注 0票数 2

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

代码语言:javascript
运行
复制
    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()的解决方案。在构造函数中添加以下代码

代码语言:javascript
运行
复制
    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.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-10 09:54:38

我认为您不能使用样式表解决这个问题。QMenu是一个矩形顶层小部件。

this是你的QMenu吗?如果是这样,请尝试如下:

代码语言:javascript
运行
复制
this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);

用实例化的this对象替换QMenu

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

代码语言:javascript
运行
复制
QRegion region (menu->x(),
                menu->y(),
                menu->sizeHint().width(),
                menu->sizeHint().height(),
                QRegion::Ellipse);
menu->setMask(region);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32491282

复制
相关文章

相似问题

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