首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在窗口外提供灵感( QPushButton : CleanMyMac)

在窗口外提供灵感( QPushButton : CleanMyMac)
EN

Stack Overflow用户
提问于 2017-07-14 00:38:47
回答 2查看 99关注 0票数 0

我正尝试在我的图形用户界面中添加一个QPushButton,这样按钮就是窗口框架外的一部分。一个很好的比较是CleanMyMac中的scan按钮(见附图)。

我试着让主窗口透明,然后添加一个仅在底部透明的背景图像,使窗口看起来比实际小。然而,这会产生许多其他的复杂情况,如窗口框架阴影(它似乎不会完全消失,因为:

代码语言:javascript
运行
复制
mainWindow->setWindowFlags(Qt::FramelessWindowHint | 
                           Qt::NoDropShadowWindowHint)

此外,使用上面提到的方法,窗口不能完全展开,我宁愿按钮的一小部分在显示之外(如CleanMyMac)。

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-14 01:24:34

您可以使用QWidget::setMask。作为示例,请考虑下面的类...

代码语言:javascript
运行
复制
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;
};

上面给出了类似于...

虽然它不是非常有用,但它演示了这项技术。

票数 3
EN

Stack Overflow用户

发布于 2017-07-14 01:08:33

我会让“扫描”按钮成为顶级窗口小部件(如button->setWindowFlags(Qt::Window); ),使其无边框和无边框,如果你想让它变圆,给窗口小部件分配一个遮罩,然后在主窗口移动时更新它的几何形状。

所以基本上就是两个窗口叠加在一起移动

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45086551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档