QFrame圆框透明背景
QFrame round border transparent background
我正在使用 QFrame 创建一个圆形上下文菜单。为了制作圆角,我使用了 Qt 样式 sheet。这是我的 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() 的解决方案。在 constructor
中添加以下代码
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.
我认为您无法使用样式表解决问题。 QMenu
是一个矩形顶级小部件。
this
是你的 QMenu
吗?如果是这样,试试这个:
this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);
用实例化的 QMenu
对象替换 this
。
当然,您也可以使用setMask隐藏需要的区域。例如:
QRegion region (menu->x(),
menu->y(),
menu->sizeHint().width(),
menu->sizeHint().height(),
QRegion::Ellipse);
menu->setMask(region);
我正在使用 QFrame 创建一个圆形上下文菜单。为了制作圆角,我使用了 Qt 样式 sheet。这是我的 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() 的解决方案。在 constructor
中添加以下代码 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.
我认为您无法使用样式表解决问题。 QMenu
是一个矩形顶级小部件。
this
是你的 QMenu
吗?如果是这样,试试这个:
this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);
用实例化的 QMenu
对象替换 this
。
当然,您也可以使用setMask隐藏需要的区域。例如:
QRegion region (menu->x(),
menu->y(),
menu->sizeHint().width(),
menu->sizeHint().height(),
QRegion::Ellipse);
menu->setMask(region);