在屏幕中选择并移动Qwidget

Abd*_*uar 5 c++ qt mouseevent qwidget

我正在使用QTCreator,我创建了一个QWidget,然后我隐藏了标题栏 setWindowFlags(Qt::CustomizeWindowHint);.

但我无法选择或移动我的小部件.我如何使用mouseEvent来解决这个问题?

Mat*_*Mat 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;
};
Run Code Online (Sandbox Code Playgroud)

mousePressEvent,您保存鼠标所在位置的全局(屏幕坐标)位置,然后在中mouseMoveEvent,您可以计算鼠标移动的距离并按小时更新小部件的位置.

请注意,如果您已启用鼠标跟踪,则需要添加更多逻辑,以便仅在实际按下鼠标按钮时移动窗口.(禁用鼠标跟踪时,默认情况下,mouseMoveEvent仅在按住按钮时生成s).