来自 QFrame 的 Qt 气球 Window
Qt Balloon Window from QFrame
我想为 Qt 中的提示创建自己的气球 window。我首先创建一个带圆角的 window。
我正在使用从 QFrame 继承的 class。 class 的构造函数包含:
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()
成员函数显示时创建圆角。我得到这个:
我怎样才能摆脱那些矩形边缘并使它们透明着色?
如果您需要任何其他信息,请询问。
如果我的猜测是正确的,那么您正在寻找类似 setMask
!
的内容
基本上您需要做的是绘制一个具有所需半径的矩形,然后将其转换为 QRegion 以与 setMask 一起使用。请参阅以下一种方式:
QPainterPath path;
path.addRoundedRect(rect(), 100, 100);
QRegion region = QRegion(path.toFillPolygon().toPolygon());
setMask(region);
这将是结果:
希望对您有所帮助!
auto frame = new QWidget(parent, Qt::Popup);
frame->setStyleSheet("background-color: red; border: 1px solid green; border-radius: 6px;");
QPainterPath path;
path.addRoundedRect(frame->rect(), 6, 6);
frame->setMask(path.toFillPolygon().toPolygon());
frame->show();
我想为 Qt 中的提示创建自己的气球 window。我首先创建一个带圆角的 window。
我正在使用从 QFrame 继承的 class。 class 的构造函数包含:
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()
成员函数显示时创建圆角。我得到这个:
我怎样才能摆脱那些矩形边缘并使它们透明着色?
如果您需要任何其他信息,请询问。
如果我的猜测是正确的,那么您正在寻找类似 setMask
!
基本上您需要做的是绘制一个具有所需半径的矩形,然后将其转换为 QRegion 以与 setMask 一起使用。请参阅以下一种方式:
QPainterPath path;
path.addRoundedRect(rect(), 100, 100);
QRegion region = QRegion(path.toFillPolygon().toPolygon());
setMask(region);
这将是结果:
希望对您有所帮助!
auto frame = new QWidget(parent, Qt::Popup);
frame->setStyleSheet("background-color: red; border: 1px solid green; border-radius: 6px;");
QPainterPath path;
path.addRoundedRect(frame->rect(), 6, 6);
frame->setMask(path.toFillPolygon().toPolygon());
frame->show();