Qt在指定区域内拖动窗口
生活随笔
收集整理的這篇文章主要介紹了
Qt在指定区域内拖动窗口
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
將窗口中的小窗口按住拖動,使其在該窗口中移動。
效果圖如下:
鼠標左鍵按住上圖中的彩色窗口,就可以在窗口的客戶區中來回拖動窗口。
項目的文件結構如下:
創建基于QWidget的應用程序,main.cpp的程序沒有做任何的改變,主要的實現的代碼如下:
dialog.h
dialog.cpp
#include "dialog.h" #include "ui_dialog.h" #include <QMouseEvent> #include <QDebug>Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog),m_isPress(false) {ui->setupUi(this);getDragAreaRect();getMousePressRect(); }Dialog::~Dialog() {delete ui; }void Dialog::getDragAreaRect() {m_dragArea = this->geometry();//客戶區大小 }void Dialog::getMousePressRect() {m_pressArea = ui->widget->rect(); }void Dialog::mousePressEvent(QMouseEvent *event) {bool isContain = m_pressArea.contains(event->pos()); // qDebug()<<"isContain:"<<isContain<<"m_pressArea:"<<m_pressArea;if(event->button() & Qt::MouseButton::LeftButton && isContain){ // qDebug()<<"鼠標按下";m_isPress = true;m_startPos = event->pos();m_topleftPos = ui->widget->frameGeometry().topLeft();m_offsetPos = m_startPos - m_topleftPos;}QWidget::mousePressEvent(event); }void Dialog::mouseMoveEvent(QMouseEvent *event) {if(m_isPress && m_dragArea.contains(event->pos()))//鼠標按下的點在整個可拖動區域內拖動{QPoint currPos = event->pos();int x = currPos.x() - m_offsetPos.x();int y = currPos.y() - m_offsetPos.y();int borderWid = m_dragArea.width() - m_pressArea.width();int borderHei = m_dragArea.height() - m_pressArea.height();if(x < 0){x = 0;}if(y < 0){y = 0;}if(x > borderWid){x = borderWid;}if(y > borderHei){y = borderHei;}ui->widget->move(x,y);}QWidget::mouseMoveEvent(event); }void Dialog::mouseReleaseEvent(QMouseEvent *event) {m_isPress = false;//更新被移動的窗口的位置,保證被點擊的點在窗口內m_pressArea.setLeft(ui->widget->geometry().x());m_pressArea.setTop(ui->widget->geometry().y());m_pressArea.setRight(m_pressArea.left() + ui->widget->width());m_pressArea.setBottom(m_pressArea.top() + ui->widget->height()); // qDebug()<<"m_pressArea:"<<m_pressArea;QWidget::mouseReleaseEvent(event); }ui文件只是向其中拖入了一個widget,并設置了其樣式,其它沒有做改變。
總結
以上是生活随笔為你收集整理的Qt在指定区域内拖动窗口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 拙见之drawPath()与fillPa
- 下一篇: 将服务器get到的响应打印,得到Http