1.效果:
2. 主要實現步驟:
設置窗口 flag:
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
?創建變量存儲位置
QPoint m_dragPosition;
對鼠標左鍵按下和移動事件做處理
void DraggableDialog::mousePressEvent(QMouseEvent *event) {isDragging = true;dragPos = event->globalPos() - frameGeometry().topLeft();
}// 鼠標移動事件,實現拖動
void DraggableDialog::mouseMoveEvent(QMouseEvent *event) {if (isDragging) {move(event->globalPos() - dragPos);}
}// 鼠標釋放事件,結束拖動
void DraggableDialog::mouseReleaseEvent(QMouseEvent *event) {isDragging = false;
}
3 .code:
#ifndef DRAGGABLEDIALOG_H
#define DRAGGABLEDIALOG_H#include <QDialog>
#include <QMouseEvent>
namespace Ui {
class DraggableDialog;
}class DraggableDialog : public QDialog
{Q_OBJECTpublic:explicit DraggableDialog(QWidget *parent = nullptr);~DraggableDialog();protected:// 鼠標按下事件,記錄點擊位置void mousePressEvent(QMouseEvent *event) override;// 鼠標移動事件,實現拖動void mouseMoveEvent(QMouseEvent *event) override;// 鼠標釋放事件,結束拖動void mouseReleaseEvent(QMouseEvent *event) override ;private:bool isDragging;QPoint dragPos;private:Ui::DraggableDialog *ui;
};#endif // DRAGGABLEDIALOG_H
cpp
#include "draggabledialog.h"
#include "ui_draggabledialog.h"DraggableDialog::DraggableDialog(QWidget *parent) :QDialog(parent),ui(new Ui::DraggableDialog)
{ui->setupUi(this);// 設置窗口無邊框this->setWindowFlags(Qt::FramelessWindowHint);setToolTip("窗口無邊框,可拖動");
}DraggableDialog::~DraggableDialog()
{delete ui;
}
void DraggableDialog::mousePressEvent(QMouseEvent *event) {isDragging = true;dragPos = event->globalPos() - frameGeometry().topLeft();
}// 鼠標移動事件,實現拖動
void DraggableDialog::mouseMoveEvent(QMouseEvent *event) {if (isDragging) {move(event->globalPos() - dragPos);}
}// 鼠標釋放事件,結束拖動
void DraggableDialog::mouseReleaseEvent(QMouseEvent *event) {isDragging = false;
}
main
int main(int argc, char *argv[]) {QApplication app(argc, argv);DraggableDialog dialog;dialog.show();return app.exec();
}