【问题标题】:Disable window on Mac OS在 Mac OS 上禁用窗口
【发布时间】:2014-07-23 09:22:25
【问题描述】:

如何从 Qt 应用程序禁用 Mac OS 上的窗口以使其无法移动?我没有找到任何好的跨平台方式,所以尝试使用EnableWindow 为 Windows 单独执行它并且它有效。 Mac OS的方式是什么?

【问题讨论】:

    标签: c++ macos qt cocoa user-interface


    【解决方案1】:

    没有防止窗口移动的跨平台方法。但是你可以覆盖QWidget::moveEvent,比如:

    void MyWindow::moveEvent(QMoveEvent *event)
    {
    
        if (event->pos() != QPoint(100,100))
              move(QPoint(100,100));
    
    }
    

    直到释放鼠标后才会更新。

    另一种方法是为窗口设置Qt::FramelessWindowHint 标志并呈现您的自定义标题栏。

    【讨论】:

      【解决方案2】:

      就我们没有找到好的跨平台方式来执行此操作而言,我们以针对 Windows 和 Mac OS 的单独代码结束。下面是我们用于 Mac OS 启用/禁用窗口的代码:

      #include <AppKit/NSView.h>
      #include <AppKit/NSWindow.h>
      
      void MacOSUtils::enableWindow(WId id, bool enable)
      {
          NSView * view = reinterpret_cast<NSView*>(id);
          Q_ASSERT(view);
          NSWindow * window = [view window];
          [window setMovable:enable];
      }
      

      【讨论】:

        猜你喜欢
        • 2020-10-22
        • 2012-03-16
        • 2022-01-01
        • 2014-12-22
        • 1970-01-01
        • 1970-01-01
        • 2018-11-23
        • 1970-01-01
        • 2013-07-20
        相关资源
        最近更新 更多