Вопрос по qt, mouseevent, c++, qwidget – Выберите и переместите Qwidget на экран

5

Я использую QTCreator и создал QWidget, а затем скрыл строку заголовка с помощьюsetWindowFlags(Qt::CustomizeWindowHint);.

Но я не могу выбрать или переместить свой виджет. Как я могу использовать mouseEvent, чтобы решить это?

Ваш Ответ

1   ответ
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Вы вычисляете, насколько далеко переместилась мышь, и обновляете позицию виджета на эту величину.

Обратите внимание, что если вы включили отслеживание мыши, вам нужно будет добавить больше логики, чтобы перемещать окно, только когда кнопка мыши фактически нажата. (С отключенным отслеживанием мыши, которое по умолчанию,mouseMoveEvents генерируются только когда кнопка нажата).

Спасибо ! это работает Abdelbari Anouar

Похожие вопросы