【发布时间】:2013-04-20 18:48:36
【问题描述】:
我有一个带有这个标志的 QMainWindow:
this->setWindowFlags(Qt::SubWindow);
如何禁止窗口移动,而这个,保持这个窗口样式?
【问题讨论】:
我有一个带有这个标志的 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 并自己渲染一个标题栏。这样一来,在处理该标题栏上的事件时,您几乎可以做任何您想做的事情。
【讨论】: