当前位置:   article > 正文

Qt Window Dialog 无标题栏 ,无边框,可拖动_qt dialog创建无标题栏

qt dialog创建无标题栏

1.效果:

2. 主要实现步骤:

设置窗口 flag:

this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);

 创建变量存储位置

QPoint m_dragPosition;

对鼠标左键按下和移动事件做处理

  1. void DraggableDialog::mousePressEvent(QMouseEvent *event) {
  2. isDragging = true;
  3. dragPos = event->globalPos() - frameGeometry().topLeft();
  4. }
  5. // 鼠标移动事件,实现拖动
  6. void DraggableDialog::mouseMoveEvent(QMouseEvent *event) {
  7. if (isDragging) {
  8. move(event->globalPos() - dragPos);
  9. }
  10. }
  11. // 鼠标释放事件,结束拖动
  12. void DraggableDialog::mouseReleaseEvent(QMouseEvent *event) {
  13. isDragging = false;
  14. }

3 .code:

  1. #ifndef DRAGGABLEDIALOG_H
  2. #define DRAGGABLEDIALOG_H
  3. #include <QDialog>
  4. #include <QMouseEvent>
  5. namespace Ui {
  6. class DraggableDialog;
  7. }
  8. class DraggableDialog : public QDialog
  9. {
  10. Q_OBJECT
  11. public:
  12. explicit DraggableDialog(QWidget *parent = nullptr);
  13. ~DraggableDialog();
  14. protected:
  15. // 鼠标按下事件,记录点击位置
  16. void mousePressEvent(QMouseEvent *event) override;
  17. // 鼠标移动事件,实现拖动
  18. void mouseMoveEvent(QMouseEvent *event) override;
  19. // 鼠标释放事件,结束拖动
  20. void mouseReleaseEvent(QMouseEvent *event) override ;
  21. private:
  22. bool isDragging;
  23. QPoint dragPos;
  24. private:
  25. Ui::DraggableDialog *ui;
  26. };
  27. #endif // DRAGGABLEDIALOG_H

cpp

  1. #include "draggabledialog.h"
  2. #include "ui_draggabledialog.h"
  3. DraggableDialog::DraggableDialog(QWidget *parent) :
  4. QDialog(parent),
  5. ui(new Ui::DraggableDialog)
  6. {
  7. ui->setupUi(this);
  8. // 设置窗口无边框
  9. this->setWindowFlags(Qt::FramelessWindowHint);
  10. setToolTip("窗口无边框,可拖动");
  11. }
  12. DraggableDialog::~DraggableDialog()
  13. {
  14. delete ui;
  15. }
  16. void DraggableDialog::mousePressEvent(QMouseEvent *event) {
  17. isDragging = true;
  18. dragPos = event->globalPos() - frameGeometry().topLeft();
  19. }
  20. // 鼠标移动事件,实现拖动
  21. void DraggableDialog::mouseMoveEvent(QMouseEvent *event) {
  22. if (isDragging) {
  23. move(event->globalPos() - dragPos);
  24. }
  25. }
  26. // 鼠标释放事件,结束拖动
  27. void DraggableDialog::mouseReleaseEvent(QMouseEvent *event) {
  28. isDragging = false;
  29. }

main

  1. int main(int argc, char *argv[]) {
  2. QApplication app(argc, argv);
  3. DraggableDialog dialog;
  4. dialog.show();
  5. return app.exec();
  6. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/700192
推荐阅读