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.添加关闭按钮或其他按钮
先创建按钮,然后连接相应事件,再在构造函数中用样式表即可(样式表可参考 这里)


效果(规则窗体与不规则窗体)

QT5自定义界面(规则与不规则窗体)_第1张图片QT5自定义界面(规则与不规则窗体)_第2张图片



附另一种自定义界面方法,对规则窗体比较实用:
在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);

你可能感兴趣的:(UI,qt,界面,qt5)