Qt 边框、透明度和填充。如何创造这种效果?

Posted

技术标签:

【中文标题】Qt 边框、透明度和填充。如何创造这种效果?【英文标题】:Qt Border, transparency, and padding. How to create this effect? 【发布时间】:2013-06-14 12:53:45 【问题描述】:

我想添加一个右上角的按钮来关闭浮动在其他小部件上的小部件。 我不能让它浮出面板的内容。

我尝试了几种方法。拥有背景通常不起作用。我不能让小部件漂浮在该背景内的框外。

这样做是这样的:

border-style: solid;
border-width: 12px 24px 37px 25px;
border-image: url(:/resources/images/panel_border_corner_btn.png) 12 24 37 25 fill repeat;
margin: 0px;
padding: 0px;

所以我尝试让顶部和右侧透明的 10 像素背景,像这样(你不会看到透明区域,但如果你下载它,你会看到它)。

所以我添加了带有按钮背景的小部件:

但无论如何我不能让它溢出边界。用 -20 修改边距会削减它,使用填充 -20 不起作用......

【问题讨论】:

【参考方案1】:

这是我的例子:

FloatPanel::FloatPanel(QWidget *parent) :
QWidget(parent)

setAutoFillBackground(true);

QVBoxLayout *layout = new QVBoxLayout(this);
layout->setContentsMargins(5, 15, 15, 5);
layout->addWidget(new QLabel("some text"));
layout->addWidget(new QPushButton("some button"));


void
FloatPanel::paintEvent(QPaintEvent *event)

    Q_UNUSED(event);

    QPainter painter(this);

    painter.setPen(Qt::black);
    painter.setBrush(Qt::white);

    painter.drawRect(0, 10, width() - 12, height() - 11);

    painter.drawPixmap(width() - 38, 0, QPixmap(":/close.png"));
 

结果如下:

【讨论】:

感谢您的示例。但这显然不是我想要的!我需要它是一个按钮,一个容器内的小部件。但它必须被取代。你看到面板的图像了吗?我编辑了文本并添加了带有透明边框的背景。非常感谢。 我的意思是,我不想使用画家。如果你愿意,我会使用样式表、边距、填充、绝对位置或其他任何东西。理想的做法是像我告诉你的那样设置带边框的透明背景,然后添加按钮,使其位于右侧。 问题仍处于打开状态。答案不是这样! hank,你知道其他解决方案吗?

以上是关于Qt 边框、透明度和填充。如何创造这种效果?的主要内容,如果未能解决你的问题,请参考以下文章

qt按钮边框的问题

iOS绘制物理按钮 - 透明圆角渐变边框

面板边框实心透明效果c#

QT4:带圆角的透明窗口

Qt开源作品18-无边框背景透明窗体

Qt开源作品18-无边框背景透明窗体