qt自定义标题栏[领卓教育](非常简单)
相信大家很多朋友对自己的ui界面感到非常的丑,下面让博主来告诉大家如何在QT简单制作一个好看的标题栏,好啦直接进入主题!
1.首先现将系统的标题栏去掉
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint);
2.然后在ui界面wiget当中自定义一个跟系统标题栏大小差不多的label(label里可以放你想放的照片)看一下效果
label如何放图片相信你会的。
3.在这个label上我们可以自己制作标题栏上的最小化,最大化,关闭(pushbutton)自定义3个pushbutton放到label(相当于标题栏)右侧
我们需要将最小化最大化关闭的图片放到pushbutton当中那么图片就尤为的重要,下面让博主告诉你们一个图片网站,非常的好,而且免费的
进入阿里巴巴矢量图里面的图片你都可以自己搜索,你想要的几乎都有哦!
下载3个你想要的图片比如(这是博主下载的3个)把他们放到你的资源里
4.下面就需要将你的图片放到pushbutton里
ui->pushButton_small->setIcon(QIcon(":/icon/small.png"));
ui->pushButton_big->setIcon(QIcon(":/icon/big.png"));
ui->pushButton_close->setIcon(QIcon(":/icon/close.png"));
然后我们需要把pushbutton的变成flat
效果图
现在你发现移动不了pushbutton也不好使,下面继续
5.将3个pushbutton转到槽函数,代码如下
void app::on_pushButton_small_clicked()
{
this->showMinimized();
}
void app::on_pushButton_big_clicked()
{
static int flag =1;
if(flag)
{
flag = !flag;
showMaximized();
}
else
{
flag = !flag;
//setWindowFlags (Qt::SubWindow);
showNormal();
}
}
void app::on_pushButton_close_clicked()
{
this->close();
}
这样你就可以最小化最大化关闭了,当然你的布局决定你的最大化里面的样式,博主在这里就不解决这个问题了,布局你可以按栅格布局,也可以按在窗体布局中布局,可以解决最大化问题。接下来我们要解决最后一个问题就是移动我们自定义的标题栏啦。
6.这个我是这么解决的,我觉还不错哈哈,现在我们再建一个label大小与之前的一模一样位置也要一模一样,放到label_header_background前面,再将3个pushbutton按键放到label的前面,然后将移动代码加入进去
void app::mousePressEvent(QMouseEvent *e)
{
if(e->button() == Qt::LeftButton)
{
isDrag = true;
m_position = e->globalPos() - this->pos();
e->accept();
}
}
void app::mouseMoveEvent(QMouseEvent *e)
{
if(isDrag && (e->buttons() && Qt::LeftButton))
{
move(e->globalPos() - m_position);
e->accept();
}
}
void app::mouseReleaseEvent(QMouseEvent *)
{
isDrag = false;
}
定义自己去定义还有头文件
这样我们的自定义标题栏就完成了,你可以在label加icon图片但是空白label要在前面这样你就可以移动你的标题栏但是三个pushbutton要放到最前面要不你按不了。