#include "XMainWindowTitle.h"
#include <QHBoxLayout>
#include <QMouseEvent>
#include <QStyle>
#include <QLabel>
XMainWindowTitle::XMainWindowTitle(QWidget *parent)
{
// 不继承父组件的背景色
setAutoFillBackground(true);
// 使用 Highlight 作为背景色
setBackgroundRole(QPalette::AlternateBase);
minimize = new QToolButton(this);
maximize = new QToolButton(this);
close= new QToolButton(this);
QPixmap pix = style()->standardPixmap(QStyle::SP_TitleBarCloseButton);
close->setIcon(pix);
close->setToolTip("close");
close->setStyleSheet("QToolButton:hover{background-color:rgb(219,75,75);}");
maxPix = style()->standardPixmap(QStyle::SP_TitleBarMaxButton);
maximize->setIcon(maxPix);
maximize->setToolTip("restore");
pix = style()->standardPixmap(QStyle::SP_TitleBarMinButton);
minimize->setIcon(pix);
minimize->setToolTip("minsize");
restorePix = style()->standardPixmap(QStyle::SP_TitleBarNormalButton);
minimize->setMinimumSize(30,25);
close->setMinimumSize(30,25);
maximize->setMinimumSize(30,25);
QLabel *label = new QLabel(this);
label->setText("Window Title");
parent->setWindowTitle("Window Title");
QHBoxLayout *hbox = new QHBoxLayout(this);
hbox->addWidget(label);
hbox->addWidget(minimize);
hbox->addWidget(maximize);
hbox->addWidget(close);
hbox->insertStretch(1, 500);
hbox->setSpacing(0);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
maxNormal = false;
connect(close, SIGNAL( clicked() ), parent, SLOT(close() ) );
connect(minimize, SIGNAL( clicked() ), this, SLOT(showSmall() ) );
connect(maximize, SIGNAL( clicked() ), this, SLOT(showMaxRestore() ) );
}
void XMainWindowTitle::showSmall()
{
parentWidget()->showMinimized();
}
void XMainWindowTitle::showMaxRestore()
{
if (maxNormal) {
parentWidget()->showNormal();
maxNormal = !maxNormal;
maximize->setIcon(maxPix);
} else {
parentWidget()->showMaximized();
maxNormal = !maxNormal;
maximize->setIcon(restorePix);
}
}
void XMainWindowTitle::mousePressEvent(QMouseEvent *e)
{
startPos = e->globalPos();
clickPos = mapToParent(e->pos());
}
void XMainWindowTitle::mouseMoveEvent(QMouseEvent *e)
{
if (maxNormal)
return;
parentWidget()->move(e->globalPos() - clickPos);
}
void XMainWindowTitle::mouseDoubleClickEvent(QMouseEvent *e)
{
if(e->button() == Qt::LeftButton)
{
//showMaxRestore();
}
}
Qt5实现自定义标题栏
需积分: 5 7 浏览量
2024-05-08
11:43:00
上传
评论
收藏 7KB ZIP 举报
deer1213
- 粉丝: 0
- 资源: 3
最新资源
- tensorflow-2.9.3-cp39-cp39-win-amd64.whl
- tensorflow-2.9.3-cp37-cp37m-win-amd64.whl
- tensorflow-gpu-2.9.2-cp37-cp37m-win-amd64.whl
- matlab的低通,高通,带通滤波器代码设计
- 系统字体下载 字体文件-仿宋-黑体-楷体-楷体-GB2312-宋体-常规 文件.zip
- 演示设计-PPT模板-水墨风格-艺术与文化展示-水墨风格PPT模板:优雅设计,适合艺术与文化演示.zip
- view_video.php.html
- 涂个壁纸.apk
- hot-spicy pot.csv
- 二进制格式的BPSK中频数据,可以用来进行解调系统的开发
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈