我有一个带有这个标志的 QMainWindow :
this->setWindowFlags(Qt::SubWindow);
如何禁止窗口移动,并保持这种窗口样式?
在使用标准窗口控件时,我认为没有跨操作系统的 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并自己渲染一个标题栏。这样,在处理该标题栏上的事件时,您几乎可以做任何您想做的事情。