1. 程式人生 > >QT5自定義介面(規則與不規則窗體)

QT5自定義介面(規則與不規則窗體)

1.宣告事件與變數
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.實現窗體繪製與滑鼠事件
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;
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;}
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);