Qt 不規則窗體總結
阿新 • • 發佈:2020-07-30
一、取消窗體標題欄
1.FramelessWindowHint 無邊框,設定FramelessWindowHint後,帶來主要問題是無法移動視窗以及無法使用滑鼠拖拽縮放視窗大小。
setWindowFlags(Qt::FramelessWindowHint |Qt::WindowStaysOnTopHint);
二、移動窗體
1.event->globalPos()獲取的滑鼠位置是滑鼠偏離電腦螢幕左上角(x=0,y=0)的位置;
2.pos()獲取的位置是主視窗(widget視窗)左上角(邊框的左上角,外左上角)相對於電腦螢幕的左上角的(x=0,y=0)偏移位置;
3.event->globalY()<pos().y()+60 在窗體什麼位置移動,通常都是點選住標題欄位置移動窗體。
bool is_move_window_;
QPoint move_window_pos_;
#include <QApplication>
#include <QMouseEvent>
void MainWidget::mousePressEvent(QMouseEvent *event) { is_move_window_ = true; move_window_pos_ = event->globalPos() - pos(); return QWidget::mousePressEvent(event); } void MainWidget::mouseMoveEvent(QMouseEvent *event) { if (is_move_window_ && (event->buttons() && Qt::LeftButton) && (event->globalPos()-move_window_pos_).manhattanLength() > QApplication::startDragDistance() &&(event->globalY()<pos().y()+60)) { move(event->globalPos()-move_window_pos_); move_window_pos_= event->globalPos() - pos(); } return QWidget::mouseMoveEvent(event); } void MainWidget::mouseReleaseEvent(QMouseEvent *event) { is_move_window_=false; }