QT5自定義介面(規則與不規則窗體)
阿新 • • 發佈:2019-02-06
1.宣告事件與變數
2.實現窗體繪製與滑鼠事件
3.新增關閉按鈕或其他按鈕
先建立按鈕,然後連線相應事件,再在建構函式中用樣式表即可(樣式表可參考這裡)
在ui->setupUi(this);前加上一下程式碼,不用重寫paintEvent,其他同上面一樣
protected:
void paintEvent(QPaintEvent *);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
private:
QPixmap pixmap;
QPoint move_point;
bool mouse_press;
2.實現窗體繪製與滑鼠事件
pixmap.load(":/images/UI"); resize(pixmap.size());}void MainWindow::paintEvent(QPaintEvent *){ QPainter painter(this); painter.drawPixmap(0, 0, pixmap);//繪製UI}void MainWindow::mousePressEvent(QMouseEvent *event){ if(event->button() == Qt::LeftButton) { mouse_press = true; //滑鼠相對於窗體的位置) move_point = event->pos(); }}void MainWindow::mouseMoveEvent(QMouseEvent *event){ if(mouse_press) { //滑鼠相對於螢幕的位置 QPoint move_pos = event->globalPos(); //移動主窗體 this->move(move_pos - move_point); }}void MainWindow::mouseReleaseEvent(QMouseEvent *){ mouse_press = false;}MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); //設定窗體標題欄隱藏並使視窗位於頂層 setWindowFlags(Qt::FramelessWindowHint| Qt::WindowStaysOnTopHint); //設定背景透明 setAttribute(Qt::WA_TranslucentBackground); //隱藏狀態列和工具欄 ui->statusBar->hide(); ui->toolBar->hide(); //滑鼠對著介面中的按鈕按住左鍵並移動再釋放:此過程mousePress事件不會產生,但會產生滑鼠移動事件和滑鼠釋放事件,所以要初始化為false<pre name="code" class="cpp"><pre name="code" class="cpp"> mouse_press = false;
3.新增關閉按鈕或其他按鈕
先建立按鈕,然後連線相應事件,再在建構函式中用樣式表即可(樣式表可參考這裡)
效果(規則窗體與不規則窗體)
附另一種自定義介面方法,對規則窗體比較實用:在ui->setupUi(this);前加上一下程式碼,不用重寫paintEvent,其他同上面一樣
QLabel *background = new QLabel(this); //設定標籤的顯示圖片 background->setPixmap(QPixmap(":/images/UI")); //設定背景圖片的位置大小 background->setGeometry(0, 0, this->width(), this->height()); //設定圖片充滿整個標籤 background->setScaledContents(true);