(我使用Qt::FramelessWindowHint
禁用标准边框)
我尝试了样式表,但border-radius
和opacity
似乎对窗口没有任何影响,它只适用于封闭窗口小部件的子项。
我的第二个想法是让窗口完全透明(使用setWindowOpacity
),然后添加一个带圆角的附加小部件(因为border-radius
适用于孩子),然后将我所有的其他组合在一起小部件进入该小部件。但这不起作用,因为setWindowOpacity
也会影响所有孩子(我没有找到改变这种行为的方法)。
任何使我想到的外窗透明的方法(如样式表opacity
)都无法正常工作(我只得到一个黑盒而不是透明窗口)
任何帮助都将受到高度赞赏。
答案 0 :(得分:16)
我有一个类似的问题,我想在一个顶级小部件上绘画,并且只显示绘制的部分。 setWindowOpacity更改了绘制部分的不透明度,这是我不想要的。
this->setAttribute(Qt::WA_TranslucentBackground, true);
在没有绘制部分的情况下更改了窗口小部件的不透明度。我只是试着扔一个按钮,这也显示完全不透明。所以你 应该能够显示你喜欢的其他孩子。
答案 1 :(得分:7)
我认为您应该使用小部件掩码,如以下Qt中所示:
http://doc.qt.io/qt-5/qtwidgets-widgets-shapedclock-example.html
我想你会找到你正在寻找的东西!
希望这有点帮助!
答案 2 :(得分:2)
void MainForm::resizeEvent(QResizeEvent * /* event */)
{
QImage image(this->size(), QImage::Format_Mono);
image.fill(0);
if(!this->isFullScreen() && !this->isMaximized())
{
image.setPixel(0, 0, 1); image.setPixel(1, 0, 1); image.setPixel(2, 0, 1); image.setPixel(3, 0, 1);
image.setPixel(0, 1, 1); image.setPixel(1, 1, 1);
image.setPixel(0, 2, 1);
image.setPixel(0, 3, 1);
image.setPixel(width() - 4, 0, 1); image.setPixel(width() - 3, 0, 1); image.setPixel(width() - 2, 0, 1); image.setPixel(width() - 1, 0, 1);
image.setPixel(width() - 2, 1, 1); image.setPixel(width() - 1, 1, 1);
image.setPixel(width() - 1, 2, 1);
image.setPixel(width() - 1, 3, 1);
image.setPixel(0, height() - 4, 1);
image.setPixel(0, height() - 3, 1);
image.setPixel(0, height() - 2, 1); image.setPixel(1, height() - 2, 1);
image.setPixel(0, height() - 1, 1); image.setPixel(1, height() - 1, 1); image.setPixel(2, height() - 1, 1); image.setPixel(3, height() - 1, 1);
image.setPixel(width() - 1, height() - 4, 1);
image.setPixel(width() - 1, height() - 3, 1);
image.setPixel(width() - 2, height() - 2, 1); image.setPixel(width() - 1, height() - 2, 1);
image.setPixel(width() - 4, height() - 1, 1); image.setPixel(width() - 3, height() - 1, 1); image.setPixel(width() - 2, height() - 1, 1); image.setPixel(width() - 1, height() - 1, 1);
}
this->setMask(QPixmap::fromImage(image));
}