我正在使用QTCreator,我创建了一个QWidget,然后我用setWindowFlags(Qt::CustomizeWindowHint);
隐藏了标题栏。
但我无法选择或移动我的小部件。我如何使用mouseEvent来解决这个问题?
答案 0 :(得分:19)
如果您希望能够通过单击并拖动(在按住鼠标按钮的同时)在屏幕上移动窗口,这是一种简单的方法:
#include <QtGui>
class W: public QWidget
{
Q_OBJECT
public:
explicit W(QWidget *parent=0) : QWidget(parent) { }
protected:
void mousePressEvent(QMouseEvent *evt)
{
oldPos = evt->globalPos();
}
void mouseMoveEvent(QMouseEvent *evt)
{
const QPoint delta = evt->globalPos() - oldPos;
move(x()+delta.x(), y()+delta.y());
oldPos = evt->globalPos();
}
private:
QPoint oldPos;
};
在mousePressEvent
中,保存鼠标所在位置的全局(屏幕坐标)位置,然后在mouseMoveEvent
中计算鼠标移动的距离并更新小部件的位置量。
请注意,如果您启用了鼠标跟踪,则需要添加更多逻辑,以便仅在实际按下鼠标按钮时移动窗口。 (禁用鼠标跟踪时,默认情况下,只有按住按钮时才会生成mouseMoveEvent
。)