Qt禁用移动窗口

时间:2013-04-26 14:37:18

标签: qt window

我有一个带有此标志的QMainWindow:

this->setWindowFlags(Qt::SubWindow);

如何禁止窗口移动,这样,保持这种窗口风格?

1 个答案:

答案 0 :(得分:1)

在使用标准窗口控件时,我认为没有跨域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并自己呈现标题栏。这样,在处理标题栏上的事件时,你几乎可以做你想做的事。