【问题标题】:Qt disable move windowQt禁用移动窗口
【发布时间】:2013-04-20 18:48:36
【问题描述】:

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

this->setWindowFlags(Qt::SubWindow);

如何禁止窗口移动,而这个,保持这个窗口样式?

【问题讨论】:

    标签: qt window


    【解决方案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_;
    };
    

    这些有一些问题,例如闪烁、直到鼠标发布才更新等等,这也因操作系统而异。

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

    【讨论】:

    • qt 文档特别警告不要从 moveEvent() 中调用 move():“警告:在 moveEvent() 中调用 move() 或 setGeometry() 可能导致无限递归。”
    猜你喜欢
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 2017-12-08
    • 2011-01-23
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 2011-07-27
    相关资源
    最近更新 更多