我试图在我的GUI中添加一个QPushButton,这样按钮就是窗框外的一方。一个很好的比较是CleanMyMac中的scan
按钮(参见附图)。
我尝试使主窗口透明,然后添加仅在底部透明的背景图像,使窗口看起来比它小。然而,这会产生许多其他复杂情况,例如窗框阴影(它似乎并没有完全消失:
mainWindow->setWindowFlags(Qt::FramelessWindowHint |
Qt::NoDropShadowWindowHint)
此外,通过上述方法,窗口无法完全展开,我更倾向于按钮的一小部分位于显示之外(如CleanMyMac)。
有什么建议吗?
答案 0 :(得分:3)
您可以使用QWidget::setMask
。举一个例子,考虑以下类...
class widget: public QWidget {
using super = QWidget;
public:
explicit widget (QWidget *parent = nullptr)
: super(parent)
, m_button("Just hanging here...")
{
setLayout(&m_layout);
m_layout.addWidget(&m_button, 1, 1);
m_layout.setRowStretch(0, 1);
m_layout.setColumnStretch(0, 1);
m_layout.setColumnStretch(2, 1);
}
protected:
virtual void resizeEvent (QResizeEvent *event) override
{
super::resizeEvent(event);
QRect r(rect());
r.setBottom(m_button.geometry().top());
QRegion region(r);
region |= m_button.geometry();
setMask(region);
}
private:
QGridLayout m_layout;
QPushButton m_button;
};
以上给出了类似......
目前并不十分有用,但它展示了这项技术。
答案 1 :(得分:2)
我做了#34;扫描"按钮顶级窗口小部件(即RUN
)使其无框架和无边框,如果您想要它,则为窗口小部件指定一个蒙版,然后在主窗口移动时更新其几何体。
所以它基本上是两个一起移动的窗口