【发布时间】:2014-07-23 09:22:25
【问题描述】:
如何从 Qt 应用程序禁用 Mac OS 上的窗口以使其无法移动?我没有找到任何好的跨平台方式,所以尝试使用EnableWindow 为 Windows 单独执行它并且它有效。 Mac OS的方式是什么?
【问题讨论】:
标签: c++ macos qt cocoa user-interface
如何从 Qt 应用程序禁用 Mac OS 上的窗口以使其无法移动?我没有找到任何好的跨平台方式,所以尝试使用EnableWindow 为 Windows 单独执行它并且它有效。 Mac OS的方式是什么?
【问题讨论】:
标签: c++ macos qt cocoa user-interface
没有防止窗口移动的跨平台方法。但是你可以覆盖QWidget::moveEvent,比如:
void MyWindow::moveEvent(QMoveEvent *event)
{
if (event->pos() != QPoint(100,100))
move(QPoint(100,100));
}
直到释放鼠标后才会更新。
另一种方法是为窗口设置Qt::FramelessWindowHint 标志并呈现您的自定义标题栏。
【讨论】:
就我们没有找到好的跨平台方式来执行此操作而言,我们以针对 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];
}
【讨论】: