QT實現用全部窗體拖動視窗
阿新 • • 發佈:2021-02-04
技術標籤:Qt的學習
本來要拖動視窗必須通過按住頂部的帶有最大化、最小化和退出按鍵的欄目才可以實現,現在我準備通過三個函式來實現按住窗體部分拖動整個視窗。具體思路是通過三個函式mousePressEvent、mouseMoveEvent和mouseReleaEvent,即“滑鼠按下事件”、“滑鼠拖動事件”和“滑鼠放開事件”三個函式來實現。首先先在標頭檔案裡定義如下幾個函式和一個退出部件:
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QMouseEvent> #include <QPushButton> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); protected: void mousePressEvent(QMouseEvent *e); void mouseMoveEvent(QMouseEvent *e); void mouseReleaEvent(QMouseEvent *e); private: Ui::Widget *ui; QPushButton *bClose; QPoint last; }; #endif // WIDGET_H
接著在.cpp檔案中一一實現這三個函式,如下所示:
#include "widget.h" #include "./ui_widget.h" #include "qmetatype.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); this->move(100,200); //this->setStyleSheet(("background:green")); this->setWindowTitle("去掉最大最小化按鈕"); bClose = new QPushButton(this); bClose->setText("關閉"); connect(bClose,SIGNAL(clicked()),this,SLOT(close())); } Widget::~Widget() { delete ui; } void Widget::mousePressEvent(QMouseEvent *e) { last = e->globalPos(); } void Widget::mouseMoveEvent(QMouseEvent *e) { int dx=e->globalX()-last.x(); int dy=e->globalY()-last.y(); last=e->globalPos(); move(x()+dx,y()+dy); } void Widget::mouseReleaEvent(QMouseEvent *e) { int dx=e->globalX()-last.x(); int dy=e->globalY()-last.y(); move(x()+dx,y()+dy); }
最後點選編譯執行即可,出來的視窗就可以通過按住窗體(最大的部分)來拖動了視窗了!!!