Как отследить события нажатия левой кнопки мыши и отпускания клавиши мыши

Есть UI:

введите сюда описание изображения

Mainclass.hpp:

#ifndef MAINCLASS_HPP
#define MAINCLASS_HPP

#include <thread>

#include <QMainWindow>

#include "../Run/settings.hpp"
#include "../Helpers/variables.hpp"
#include "../Utils/baseutils.hpp"
#include "../Utils/guardutils.hpp"
#include "../Theme/frame.hpp"
#include "../ThirdParty/thirdparty.hpp"

QT_BEGIN_NAMESPACE
namespace Ui { class Mainclass; }
QT_END_NAMESPACE

class Mainclass : public QMainWindow
{
    Q_OBJECT

public:
    llu memory = 0;
    Mainclass(QWidget *parent = nullptr);
    ~Mainclass();

private slots:

private:
    Ui::Mainclass *ui;
};
#endif // MAINCLASS_HPP

Mainclass.cpp:

#include "mainclass.hpp"
#include "ui_mainclass.h"

Mainclass::Mainclass(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::Mainclass)
{

    // Config GUI
    ui->setupUi(this);

}

Mainclass::~Mainclass()
{
    delete ui;
}

Как отследить момент нажатия и отпускания мыши (нужно, чтобы перетаскивать форму, ведь я отключил системную рамку)


Ответы (1 шт):

Автор решения: Alexander Chernin

Коротенько:

class MainClass : public QMainWindow {
protected:
    void mousePressEvent(QMouseEvent* event) override {
        if ( event->button() == Qt::LeftButton ) {
            _p = event->pos();
        } 
    }
    void mouseMoveEvent(QMouseEvent* event) override {
        // Если _p - не null, значит он был установлен, а это значит,
        // что была нажата лкм, значит можно двигать окно относительно _p
        if( !_p.isNull() ) {
            move( mapToGlobal(event->pos() - _p) );
        }
    }

    // В принципе, для перемещения окна можно обойтись и без этого метода,
    // но раз в вопросе сказано про отпускание км, то
    void mouseReleaseEvent(QMouseEvent* event) override {
        // устанавливаем _p в null-объект QPoint()
        _p = QPoint();
    }
private:
    QPoint _p;
}
→ Ссылка