在有标题栏的 QDialog 上禁止移动
时间: 2024-04-10 15:27:12 浏览: 162
要在有标题栏的 QDialog 上禁止移动,你可以重写 QDialog 的 `mousePressEvent()` 和 `mouseMoveEvent()` 事件,并在这些事件中阻止移动操作。以下是一个示例代码:
```cpp
#include <QMouseEvent>
#include <QDialog>
class CustomDialog : public QDialog
{
public:
CustomDialog(QWidget *parent = nullptr) : QDialog(parent) {}
protected:
void mousePressEvent(QMouseEvent *event) override
{
// 获取鼠标按下时的位置
m_dragPosition = event->globalPos();
event->accept();
}
void mouseMoveEvent(QMouseEvent *event) override
{
// 阻止移动操作
QPoint delta = event->globalPos() - m_dragPosition;
move(x() + delta.x(), y() + delta.y());
m_dragPosition = event->globalPos();
event->accept();
}
private:
QPoint m_dragPosition;
};
```
在上面的代码中,我们创建了一个名为 `CustomDialog` 的自定义 QDialog 类。通过重写 `mousePressEvent()` 和 `mouseMoveEvent()` 事件,我们可以获取鼠标按下和移动时的位置,并阻止 QDialog 的移动操作。
使用这个自定义的 `CustomDialog` 类代替普通的 QDialog 类来创建禁止移动的对话框。例如:
```cpp
CustomDialog dialog;
dialog.exec();
```
这样,你就可以在有标题栏的 QDialog 上禁止移动操作了。请注意,这种方法只是阻止了鼠标拖动对话框进行移动,但仍然允许使用窗口管理器的方式移动对话框(如点击标题栏并拖动)。如果你需要完全禁止移动,请参考前面提到的设置窗口标志的方法。
阅读全文