Qt禁用移动窗口。

3

我有一个带有以下标志的QMainWindow:

this->setWindowFlags(Qt::SubWindow);

如何禁止窗口移动,同时保持窗口样式不变?
1个回答

2
我认为在使用标准窗口控件时,没有跨操作系统的Qt方法来实现这一点。
您可以尝试类似以下的方法:
class Widget : public QWidget {
  Q_OBJECT

public:
  Widget()
    : fixed_pos_(QPoint(100, 100)) {
    setWindowFlags(Qt::SubWindow);
  }

  void SetFixedPos(const QPoint& pos) {
    fixed_pos_ = pos;
  }

protected:
  void moveEvent(QMoveEvent* ev) {
    if (ev->pos() != fixed_pos_)
      move(fixed_pos_);
  }

private:
  QPoint fixed_pos_;
};

这段话的意思是:这些问题包括闪烁、直到鼠标释放才更新等,而且每个操作系统的情况也不同。最有效的方法是将窗口设置为 Qt::FramelessWindowHint 并自己渲染标题栏。这样,你就可以在处理标题栏事件时几乎做任何想做的事情。

2
Qt文档特别警告不要在moveEvent()函数内部调用move()函数:"警告:在moveEvent()函数内部调用move()或setGeometry()函数可能会导致无限递归。" - fyngyrz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接