Qt 窗口设置自定义标题栏(隐藏系统标题栏)

在使用Qt制作软件时,为了追求界面美观或者软件整体布局的协调性,通常我们会希望修改程序自带的系统标题栏,但是我找了好久,都没有找到直接修改系统标题栏样式的方法,大多数都是通过去除系统自带边框和标题栏,自己设计一个自定义的标题栏。

具体方法如下:

/***************************************  注意  ********************************************************
    1.隐藏标题栏相当于将窗口的边框隐藏了,此时通过样式表设置窗口边框圆角或其他边框属性无效
    2.拖拽边框设置窗口大小缩放无效
*******************************************************************************************************/

//1.首先第一步就是,隐藏Windows窗口自带的标题栏

	this->setWindowFlag(Qt::FramelessWindowHint);

//通过设置窗口的标志来实现隐藏窗口标题栏的功能
//常用的其他窗口标志如下:
//	Qt::Tool	//隐藏任务栏图标
//	Qt::Tooltip	//隐藏窗口标题栏和任务栏图标
//	Qt::FramelessWindowHint	//隐藏标题栏(无法移动和缩放窗口)
        
//2.设置隐藏窗口标题栏后就无法移动和缩放窗口了
//想要移动和缩放窗口,就需要重载鼠标事件

//	a.在.h文件中声明一个变量用来存放位置坐标
private:
   QPoint m_lastPos;

//	b.声明鼠标事件函数
protected:
    void  mouseMoveEvent(QMouseEvent *event) override;
    void  mousePressEvent(QMouseEvent *event) override;
    void  mouseReleaseEvent(QMouseEvent *event) override;

//	c.重写鼠标事件
//鼠标移动事件
void MainWindow::mouseMoveEvent(QMouseEvent *event)	
{
    //移动窗口
    this->move(this->x()+(event->globalX()-m_lastPos.x()),this->y()+(event->globalY()-m_lastPos.y()));
    //记录窗口坐标
    m_lastPos = event->globalPos();
}
//鼠标按下事件
void MainWindow::mousePressEvent(QMouseEvent *event)
{
    //记录鼠标按下时的窗口坐标
    m_lastPos = event->globalPos();
}
//鼠标松开事件
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
    //记录鼠标松开时窗口的坐标
    m_lastPos = event->globalPos();
}

/********************************** 相关函数 *****************************************
    this->move(x,y);    //移动当前窗口位置至指定xy点;
    event->globalPos();    //返回鼠标事件发生时的全局坐标点;
    event->globalX();    //返回鼠标事件发生时的全局坐标点的x坐标;
    event->globaly();    //返回鼠标事件发生时的全局坐标点的y坐标;
****************************************************************************************/

 在设置窗口无标题栏时,是通过去掉窗口边框实现的,在这种情况下,设置窗口边框圆角属性是无法生效的,如果要设置圆角的话,可以参考以下方法。

一、设置窗口背景透明

this->setAttribute(Qt::WA_TranslucentBackground, true);//设置窗口背景透明

二、在整个界面中添加一个widget控件作为整个软件的背景板

三、由于设置了窗口透明,第二步中所设的widget的边框,就可以近似看作软件的边框,这样设置widget的qss样式表中的圆角属性,就可以实现窗口圆角了。

QWdiget#widget_background{
    border:1px solid #000000;
    border-radius:5px;
}

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值