在屏幕中选择并移动Qwidget



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

但是我无法选择或移动我的小部件。如何使用鼠标事件来解决这个问题?

如果您希望

能够通过单击和拖动(同时保持按下鼠标按钮)在屏幕上移动窗口,这里有一个简单的方法可以做到这一点:

#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)。

最新更新