3

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

this->setWindowFlags(Qt::SubWindow);

如何禁止窗口移动,并保持这种窗口样式?

4

1 回答 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_;
};

这些有一些问题,例如闪烁,直到鼠标发布才更新等等,每个操作系统也不同。

最有效的方法是让你的 Window 成为 Qt::FramelessWindowHint并自己渲染一个标题栏。这样,在处理该标题栏上的事件时,您几乎可以做任何您想做的事情。

于 2013-04-26T15:42:57.157 回答