Qt之重写标题栏


在项目开发中,我们一般不会使用QMainWindow中的标题栏,因为qss无法设置其风格样式,程序运行起来后标题栏为白边,与主窗体风格严重冲突,不美观。
(1)修改前窗口展示如下:

在这里插入图片描述
(2)跟着本章修改完成后展示:
在这里插入图片描述

1.新建窗口

新建MainWindow窗口,删除标题栏,添加label_Image,用于添加标题图标;添加label_Title,用于添加标题文本;添加关闭、最大化、最小化三个按钮。
在这里插入图片描述
在这里插入图片描述

2.设置窗口属性

2.1设置窗口为无边框窗口

this->setWindowFlags(Qt::FramelessWindowHint);

2.2设置控件样式

    ui->label_Title->setText("新的窗口");
    QPixmap pixmap;
    bool res = pixmap.load("../res/image/image.png");
    pixmap = pixmap.scaled(24,24,Qt::KeepAspectRatio);
    ui->label_Image->setPixmap(pixmap);

    ui->pushButton_max->setStyleSheet("background-color:transparent;");
    ui->pushButton_close->setStyleSheet("background-color:transparent;");
    ui->pushButton_min->setStyleSheet("background-color:transparent;");
    ui->pushButton_max->setIcon(QIcon("../res/image/max_normal.png"));
    ui->pushButton_close->setIcon(QIcon("../res/image/close_hover.png"));
    ui->pushButton_min->setIcon(QIcon("../res/image/min_normal.png"));

3.窗口控制按钮信号

3.1最小化

void MainWindow::on_pushButton_min_clicked()
{
    this->showMinimized();
}

3.2最大化

void MainWindow::on_pushButton_max_clicked()
{
    if(this->isMaximized())
    {
        ui->pushButton_max->setIcon(QIcon("../res/image/normal_normal.png"));
        this->showNormal();
    }
    else
    {
        ui->pushButton_max->setIcon(QIcon("../res/image/max_normal.png"));
        this->showMaximized();
    }
}

3.3关闭窗口

void MainWindow::on_pushButton_close_clicked()
{
    this->close();
}

4.窗口移动

由于窗口删除了标题栏,窗口无法移动,所以需要重载鼠标按压、释放、移动函数实现窗口移动功能。

4.1鼠标按压

void MainWindow::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
        mousePress = true;
    }
    movePoint = event->globalPos() - this->pos();
}

4.2鼠标释放

void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
    mousePress = false;
}

4.3鼠标移动

void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
    if(mousePress)
    {
        QPoint movePos = event->globalPos();
        this->move(movePos - movePoint);
    }
}
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值