1. 程式人生 > 實用技巧 >Qt 不規則窗體總結

Qt 不規則窗體總結

一、取消窗體標題欄

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; }