Как отследить события нажатия левой кнопки мыши и отпускания клавиши мыши
Есть 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;
}
