qmainwindow 标题栏_Qt之360安全卫士主界面(标题栏)
其实网上有过360界面一些小细节的实现,基本的也都比较简单,项目完事,闲来无事,就按照自己电脑的360安全卫士9.1做了一个界面,包括托盘、最小化、最大化、界面风格样式美化等!
效果如下:
有人可能会好奇,界面的图片跟360的一样,开始的时候我也比较头疼,要做界面怎么可以没有图片呢!然后呢,既然安装过360,里面会有界面的一部分图片(当然,不是全部都有),把里面的图片拿出来,至于其它没有的那就只能找人做了,界面的美观度与美工有很大的关系!在这里谢过我的师傅(软件工程师兼职美工,你值得拥有)
标题栏:
关于标题栏的按钮样式(皮肤、最小化、最大化、关闭等)不再多说,三种状态:正常、鼠标划过、鼠标按下!可以由QPushButton、QToolButton实现均可,关于标题“360安全卫士9.1”可由QLabel实现,设置字体为白色即可!
在这里我把“电脑体检、木马查杀等”这部分功能栏也称为标题栏,当双击其空白处也可实现窗体的最大化,通过点击不同的按钮来切换至不同的界面,按钮由QToolButton实现,设置其文本位于图标之下、,后面的“360安全卫士”是一张图片,在安装包里可以找到!
代码如下:
#include "title_widget.h"
#include "tool_button.h"
TitleWidget::TitleWidget(QWidget *parent)
:QWidget(parent)
{
version_title = new QLabel();
skin_button
= new PushButton();
main_menu_button = new PushButton();
min_button =
new PushButton();
max_button =
new PushButton();
close_button
= new PushButton();
medal_button = new QPushButton();
version_title->setStyleSheet("color:white;");
//设置图片
skin_button->loadPixmap(":/sysButton/skin_button");
main_menu_button->loadPixmap(":/sysButton/main_menu");
min_button->loadPixmap(":/sysButton/min_button");
max_button->loadPixmap(":/sysButton/max_button");
close_button->loadPixmap(":/sysButton/close_button");
QIcon
medal_icon(":/contentWidget/medal");
medal_button->setIcon(medal_icon);
medal_button->setFixedSize(25, 25);
medal_button->setIconSize(QSize(25,
25));
medal_button->setStyleSheet("background:transparent;");
connect(skin_button, SIGNAL(clicked()), this,
SIGNAL(showSkin()));
connect(main_menu_button, SIGNAL(clicked()),
this, SIGNAL(showMainMenu()));
connect(min_button, SIGNAL(clicked()), this,
SIGNAL(showMin()));
connect(max_button, SIGNAL(clicked()), this,
SIGNAL(showMax()));
connect(close_button, SIGNAL(clicked()), this,
SIGNAL(closeWidget()));
QHBoxLayout *title_layout = new QHBoxLayout();
title_layout->addWidget(version_title,0,Qt::AlignVCenter);
title_layout->addStretch();
title_layout->addWidget(medal_button, 0,
Qt::AlignTop);
title_layout->addWidget(skin_button, 0, Qt::AlignTop);
title_layout->addWidget(main_menu_button, 0,
Qt::AlignTop);
title_layout->addWidget(min_button, 0, Qt::AlignTop);
title_layout->addWidget(max_button, 0, Qt::AlignTop);
title_layout->addWidget(close_button, 0, Qt::AlignTop);
title_layout->setSpacing(0);
title_layout->setContentsMargins(0, 0, 5,
0);
version_title->setContentsMargins(15, 0, 0,
0);
skin_button->setContentsMargins(0, 0, 10,
0);
QStringList string_list;
string_list<
":/img/toolWidget/xiTong.png"<
":/img/toolWidget/menZhen.png"<
QHBoxLayout *button_layout = new
QHBoxLayout();
QSignalMapper *signal_mapper = new
QSignalMapper(this);
for(int i=0; i
{
ToolButton *tool_button = new
ToolButton(string_list.at(i));
button_list.append(tool_button);
connect(tool_button,
SIGNAL(clicked()), signal_mapper, SLOT(map()));
signal_mapper->setMapping(tool_button,
QString::number(i, 10));
button_layout->addWidget(tool_button,
0, Qt::AlignBottom);
}
connect(signal_mapper, SIGNAL(mapped(QString)),
this, SLOT(turnPage(QString)));
QLabel *logo_label = new QLabel();
QPixmap pixmap(":/img/logo.png");
logo_label->setPixmap(pixmap);
logo_label->setFixedSize(pixmap.size());
logo_label->setCursor(Qt::PointingHandCursor);
button_layout->addStretch();
button_layout->addWidget(logo_label);
button_layout->setSpacing(8);
button_layout->setContentsMargins(15, 0, 0,
0);
QVBoxLayout *main_layout = new
QVBoxLayout();
main_layout->addLayout(title_layout);
main_layout->addLayout(button_layout);
main_layout->setSpacing(0);
main_layout->setContentsMargins(0, 0, 0,
0);
this->translateLanguage();
setLayout(main_layout);
setFixedHeight(100);
is_move =
false;
}
void TitleWidget::translateLanguage()
{
version_title->setText(tr("title"));
skin_button->setToolTip(tr("change
skin"));
main_menu_button->setToolTip(tr("main
menu"));
min_button->setToolTip(tr("minimize"));
max_button->setToolTip(tr("maximize"));
close_button->setToolTip(tr("close"));
button_list.at(0)->setText(tr("power"));
button_list.at(1)->setText(tr("mummy"));
button_list.at(2)->setText(tr("hole"));
button_list.at(3)->setText(tr("repair"));
button_list.at(4)->setText(tr("clear"));
button_list.at(5)->setText(tr("optimize"));
button_list.at(6)->setText(tr("expert"));
button_list.at(7)->setText(tr("software"));
}
void TitleWidget::mousePressEvent(QMouseEvent *e)
{
press_point
= e->pos();
is_move =
true;
}
void TitleWidget::mouseMoveEvent(QMouseEvent *e)
{
if((e->buttons() == Qt::LeftButton) && is_move)
{
static QWidget* parent_widget = this->parentWidget();
QPoint parent_point = parent_widget->pos();
parent_point.setX(parent_point.x() + e->x() -
press_point.x());
parent_point.setY(parent_point.y() + e->y() -
press_point.y());
parent_widget->move(parent_point);
}
}
void TitleWidget::mouseReleaseEvent(QMouseEvent *)
{
if(is_move)
{
is_move = false;
}
}
void TitleWidget::mouseDoubleClickEvent(QMouseEvent *)
{
emit
showMax();
}
void TitleWidget::turnPage(QString current_page)
{
bool ok; int current_index = current_page.toInt(&ok,
10);
for(int i=0; i
{
ToolButton *tool_button =
button_list.at(i);
if(current_index == i)
{
tool_button->setMousePress(true);
}
else
{
tool_button->setMousePress(false);
}
}
}
这里包括重写鼠标事件mousePressEvent、mouseMoveEvent、mouseReleaseEvent来控制主窗体的移动、通过mouseDoubleClickEvent来实现双击最大化等,translateLanguage()主要是为了后面实现多语化使用!
注:
技术在于交流、沟通,转载请注明出处并保持作品的完整性。
qmainwindow 标题栏_Qt之360安全卫士主界面(标题栏)相关推荐
- Qt之实现360安全卫士主界面(转)
Qt之实现360安全卫士主界面(一) 该博文只是模仿360安全卫士的主界面,并不牵涉其中的任何业务功能:重在个人见解以及界面实现:关于360安全卫士的主界面,我想大家都见到过,毕竟基本大部分人都安装过 ...
- Qt之实现360安全卫士主界面(四)
这篇博文主要讲解360安全卫士标题栏的创建.关于标题栏,我想大家应该都非常熟悉了,其主要包括窗口关闭.最大化/还原.最小化等按钮:但是标题栏的这些按钮都是非常有特色的. 在我写这篇博文之前,我就已经完 ...
- Qt之实现360安全卫士主界面
Qt之实现360安全卫士主界面(一) 该博文只是模仿360安全卫士的主界面,并不牵涉其中的任何业务功能:重在个人见解以及界面实现:关于360安全卫士的主界面,我想大家都见到过,毕竟基本大部分人都安装过 ...
- Qt之实现360安全卫士主界面(一)
转自:http://www.cnblogs.com/appsucc/archive/2012/03/14/2395657.html 该博文只是模仿360安全卫士的主界面,并不牵涉其中的任何业务功能:重 ...
- Qt之实现360安全卫士主界面(三)
这篇博文主要讲述360安全卫士工具栏的创建:工具栏由图片和文字组成,当鼠标移到工具栏按钮上时,需要有些特征表达该现象,如背景色变化等:当然鼠标单击工具栏按钮时,同样也要有些特征,并且这个特征区别于鼠标 ...
- Qt实现360安全卫士主界面(中央窗体)
中央窗口可以分为左右两部分,左半边由QWidget实现,包含三个QLabel,一个QPushButton,QLabel主要用来显示图片,文本信息,还有一个按钮负责"立即体验". 右 ...
- 【360安全卫士显示界面异常解决】
360安全卫士显示界面异常解决 问题/解决 首先打开360安全卫士,单击三横杠 选择设置 选择界面缩放,开启主界面自动缩放功能,点击确定 4.此时360安全卫士界面就显示正常了
- Qt实现360安全卫士登录界面
在分享之前,我们先看截图,用事实说话,有图有真相! 通过点击底部栏的新浪,人人按钮来进行3个界面的互相切换,进行用户删除时,自定义的QDialog用于和用户交互,通过exec()可进入堵塞状态. 界面 ...
- mfc界面的onvscroll没反应_电脑小技巧之360安全卫士卸载不掉怎么办?只因一个开关没打开...
目前电脑操作做系统基本都是使用的win10系统,而win10本身的安全系windows defender也非常实用,磁盘清理,uac之类的功能大部分都有,基本可以替换掉某些安全卫士的大部分功能,所以就 ...
最新文章
- 安装node和spm过程
- 破2.5万亿美元,全球市值第一「巨无霸」尾随Meta杀入元宇宙!
- bzoj - 2038: [2009国家集训队]小Z的袜子(hose)
- 旅馆客未满 计算机术语,前厅测试题
- python 粒子动画_python-盒子中有很多粒子-物理模拟
- oracle查询语句子句,Oracle 查询执行顺序
- minist _On_[GoogleNet]
- redux-form(V7.4.2)笔记(三)之Flow简介
- 工时分析怎么分析?分享:实用的工时分析方法及软件工具!
- python统计字符个数然后变成字典_Python之String字符串练习一(统计字符串中单词出现个数并生成字典、打印下一秒钟时间、简单购物车功能)...
- JavaWeb课堂笔记
- linux读取excel文件内容,如何读取EXCEL文件到内表
- 传统语音识别介绍【四】—— 语言模型
- 不改一行代码!快速迁移 Flask 应用上云
- 良心推荐:看完这20部BBC神级纪录片,英语水平提升几个Level!
- 不服丨月薪10k程序员vs月薪40K的程序员
- matlab修改坐标轴刻度间隔大小
- 高等数学(下)空间解析几何与向量代数
- 【Babylonjs】材质
- 扫地机器人如何取下蓄水器_斐纳扫地机器人水箱怎么用_科沃斯扫地机器人水箱_扫地机器人水箱怎么卸...
热门文章
- 《关于我的同学被邪神附体这档事》
- SQL注入之注入原理
- python判断设备是否联网
- python对两个list取交集、并集、和异或
- WP7开发系列——Windows Phone 7 开发环境搭建
- 物联卡流量卡是什么?如何抓住物联卡的应用场景与使用人群?
- 7z.001....7z.002.....格式的分卷压缩包
- iPhone6,更为完美
- python天气数据分析论文_《Python数据分析与机器学习实战-唐宇迪》读书笔记第9章--随机森林项目实战——气温预测(2/2)...
- Pycharm 手动程序包安装