
我正尝试在我的图形用户界面中添加一个QPushButton,这样按钮就是窗口框架外的一部分。一个很好的比较是CleanMyMac中的scan按钮(见附图)。
我试着让主窗口透明,然后添加一个仅在底部透明的背景图像,使窗口看起来比实际小。然而,这会产生许多其他的复杂情况,如窗口框架阴影(它似乎不会完全消失,因为:
mainWindow->setWindowFlags(Qt::FramelessWindowHint |
Qt::NoDropShadowWindowHint)此外,使用上面提到的方法,窗口不能完全展开,我宁愿按钮的一小部分在显示之外(如CleanMyMac)。
有什么建议吗?
发布于 2017-07-14 01:24:34
您可以使用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;
};上面给出了类似于...

虽然它不是非常有用,但它演示了这项技术。
发布于 2017-07-14 01:08:33
我会让“扫描”按钮成为顶级窗口小部件(如button->setWindowFlags(Qt::Window); ),使其无边框和无边框,如果你想让它变圆,给窗口小部件分配一个遮罩,然后在主窗口移动时更新它的几何形状。
所以基本上就是两个窗口叠加在一起移动
https://stackoverflow.com/questions/45086551
复制相似问题