Windows外的QPushButton(灵感:CleanMyMac)

时间:2017-07-13 16:38:47

标签: c++ qt user-interface

enter image description here我试图在我的GUI中添加一个QPushButton,这样按钮就是窗框外的一方。一个很好的比较是CleanMyMac中的scan按钮(参见附图)。

我尝试使主窗口透明,然后添加仅在底部透明的背景图像,使窗口看起来比它小。然而,这会产生许多其他复杂情况,例如窗框阴影(它似乎并没有完全消失:

mainWindow->setWindowFlags(Qt::FramelessWindowHint | 
                           Qt::NoDropShadowWindowHint)

此外,通过上述方法,窗口无法完全展开,我更倾向于按钮的一小部分位于显示之外(如CleanMyMac)。

有什么建议吗?

2 个答案:

答案 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;
};

以上给出了类似......

enter image description here

目前并不十分有用,但它展示了这项技术。

答案 1 :(得分:2)

我做了#34;扫描"按钮顶级窗口小部件(即RUN)使其无框架和无边框,如果您想要它,则为窗口小部件指定一个蒙版,然后在主窗口移动时更新其几何体。

所以它基本上是两个一起移动的窗口