C++ QFrame中的Qt气球窗口

C++ QFrame中的Qt气球窗口,c++,qt,stylesheet,qwidget,qframe,C++,Qt,Stylesheet,Qwidget,Qframe,我想为Qt中的提示创建我自己的气球窗口。我首先创建一个带有圆角的窗口 我使用的是从QFrame继承的类。该类的构造函数包含: this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint); Pal.setColor(QPalette::Background, Qt::yellow); this->setAutoFillBackground(true); this->setPalette(Pal); this->set

我想为Qt中的提示创建我自己的气球窗口。我首先创建一个带有圆角的窗口

我使用的是从QFrame继承的类。该类的构造函数包含:

this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
Pal.setColor(QPalette::Background, Qt::yellow);
this->setAutoFillBackground(true);
this->setPalette(Pal);
this->setStyleSheet("QFrame {border-style: solid; border-width: 10px;"
                    "border-radius: 100px;"
                    "min-width: 10em; background-clip: padding; background-origin: content;}");
但这并不是在使用
show()
成员函数进行显示时创建圆角。我明白了:

我怎样才能去掉那些长方形的边,并把它们涂成透明的颜色呢


如果您需要任何其他信息,请询问。

如果我的猜测是正确的,您正在寻找类似的信息

基本上,您需要做的是绘制一个具有所需半径的矩形,然后将其转换为QRegion以与setMask一起使用。请参见下面的单程:

QPainterPath path;
path.addRoundedRect(rect(), 100, 100);
QRegion region = QRegion(path.toFillPolygon().toPolygon());
setMask(region);
结果就是:

希望有帮助

auto-frame=newqwidget(父项,Qt::Popup);
框架->设置样式表(“背景色:红色;边框:1px纯绿色;边框半径:6px;”);
QPainterPath路径;
addRoundedRect(frame->rect(),6,6);
frame->setMask(path.toFillPolygon().toPolygon());
框架->显示();

paintEvent()中没有一些自定义绘图,我怀疑您想要的是什么。但只适用于顶级小部件。OP正在尝试使用无框架窗口。不满意吗?是的。我想得太多了。现在我用qml做所有的gui工作。这样做容易多了,谢谢。这是可行的,只是窗口比原来的窗口小。你知道如何确定这个尺寸吗?最小尺寸应该是与圆角半径相关的直径,在你的情况下,最小尺寸的宽度和高度都应该是200(这样你会得到一个圆)。虽然这个代码可以解决这个问题,如何以及为什么解决这个问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。