Qt完美实现360安全卫士主界面标题栏

作者:小菜 更新时间:2025-02-26 点击数:
简介:这篇博文主要讲解360安全卫士标题栏的创建。

关于标题栏,我想大家应该都非常熟悉了,其主要包括窗口关闭、最大化/还原、最小化等按钮;但是标题栏的这些按钮都是非常有

【菜科解读】

这篇博文主要讲解360安全卫士标题栏的创建。

关于标题栏,我想大家应该都非常熟悉了,其主要包括窗口关闭、最大化/还原、最小化等按钮;但是标题栏的这些按钮都是非常有特色的。

在我写这篇博文之前,我就已经完成了类似360安全卫士标题栏的创建代码,在开始写代码时,我仔细想了想360安全卫士主界面标题栏的构建方法,它是自绘的还是贴图的?所以我特意在360论坛查了查它皮肤制作的方法,并在它的安装目录下的找到了这些按钮的特定图片(皮肤文件解压),即由贴图来做的。

既然知道了构建方法,那么就用代码实现即可,我实现的效果图如下(初始界面是这样,标题栏的其他效果和360安全卫士的标题栏效果一样):

标题栏也是自定义的部件(继承于QWidget),在这个自定义的部件里,你想实现啥功能都可以。

一、部件构建

部件构建当然是创建子部件,设置子部件样式,给标题栏设置布局管理等,这些也都是很基础的。

标题栏由三个QLabel和五个QToolButton组成,这五个QToolButton即为标题栏最右边的五个功能按钮,首先当然是创建这些子部件了。

//创建子部件void TitleBar::CreateWidget() //图像标签--logo m_pLabelIcon = new QLabel(this); QPixmap objPixmap(":/image/360AboutLogo.png"); m_pLabelIcon->setPixmap(objPixmap.scaled(TITLE_H,TITLE_H)); //文本标签--标题 m_pLabelTitle = new QLabel(this); m_pLabelTitle->setText(QString("360 Safe Guard V8.5")); //文本标签--样式版本 m_pLabelVersion = new QLabel(this); m_pLabelVersion->setText(QString("Use Class Style")); //设置鼠标形状 m_pLabelVersion->setCursor(Qt::PointingHandCursor); //按钮--更换皮肤 m_pBtnSkin = new QToolButton(this); //设置初始图片 SetBtnIcon(m_pBtnSkin,eBtnStateDefault,true); //按钮--菜单 m_pBtnMenu = new QToolButton(this); SetBtnIcon(m_pBtnMenu,eBtnStateDefault,true); //按钮--最小化 m_pBtnMin = new QToolButton(this); SetBtnIcon(m_pBtnMin,eBtnStateDefault,true); //按钮--最大化/还原 m_pBtnMax = new QToolButton(this); SetBtnIcon(m_pBtnMax,eBtnStateDefault,true); //按钮--关闭 m_pBtnClose = new QToolButton(this); SetBtnIcon(m_pBtnClose,eBtnStateDefault,true); //获得子部件 const QObjectList &objList = children(); for(int nIndex=0; nIndexsetMouseTracking(true); //如果是QToolButton部件 if(0==qstrcmp(objList.at(nIndex)->metaObject()->className(),"QToolButton")) //连接pressed信号为slot_btnpress connect(((QToolButton*)(objList.at(nIndex))),SIGNAL(pressed()),this,SLOT(slot_btnpress())); //连接clicked信号为slot_btnclick connect(((QToolButton*)(objList.at(nIndex))),SIGNAL(clicked()),this,SLOT(slot_btnclick())); //设置顶部间距 ((QToolButton*)(objList.at(nIndex)))->setContentsMargins(0,VALUE_DIS,0,0);}

子部件创建完之后,就要设置这些子部件的基本样式了,我使用qss样式表对其进行样式设置,当然还有其他方法。

View Code

//设置子部件样式(qss)void TitleBar::SetWidgetStyle() //设置标签的文本颜色,大小等以及按钮的边框 setStyleSheet("QLabel{color:#CCCCCC;font-size:12px;font-weight:bold;}QToolButton{border:0px;}"); //设置左边距 m_pLabelTitle->setStyleSheet("margin-left:6px;"); //设置右边距以及鼠标移上去时的文本颜色 m_pLabelVersion->setStyleSheet("QLabel{margin-right:10px;}QLabel:hover{color:#00AA00;}");}

最后就是创建布局管理器,把这些子部件加入到布局管理器中,我使用水平布局管理器,如下代码所示:

View Code

//创建设置布局void TitleBar::CreateLayout() //水平布局 m_pLayout = new QHBoxLayout(this); //添加部件 m_pLayout->addWidget(m_pLabelIcon); m_pLayout->addWidget(m_pLabelTitle); //添加伸缩项 m_pLayout->addStretch(1); //添加部件 m_pLayout->addWidget(m_pLabelVersion); m_pLayout->addWidget(m_pBtnSkin); m_pLayout->addWidget(m_pBtnMenu); m_pLayout->addWidget(m_pBtnMin); m_pLayout->addWidget(m_pBtnMax); m_pLayout->addWidget(m_pBtnClose); //设置Margin m_pLayout->setContentsMargins(0,0,VALUE_DIS,0); //设置部件之间的space m_pLayout->setSpacing(0); setLayout(m_pLayout);}

在这节中,设置按钮图片的函数为SetBtnIcon函数,该函数的原型如下所示:

View Code

void SetBtnIcon(QToolButton *pBtn,eBtnMoustState state,bool bInit=false);

其中pBtn代表被设置图片的按钮,而eBtnMoustState是一个枚举值,代表该按钮当前的状态,枚举定义如下所示:

View Code

//枚举,按钮状态enum eBtnMoustState{ eBtnStateNone,//无效 eBtnStateDefault,//默认值(如按钮初始显示) eBtnStateHover,//鼠标移到按钮上状态 eBtnStatePress//鼠标按下按钮时状态 };

而bInit表示是否是初始化设置,因为在SetBtnIcon函数里需要获得主界面最大化标志值,而这时候主界面窗口构造函数还没完成,同时在SetBtnIcon函数里又需要获得主界面窗口对象,因此会矛盾,所以使用了bInit标志值进行区分。

SetBtnIcon函数的定义如下代码所示:

View Code

//设置按钮不同状态下的图标void TitleBar::SetBtnIcon(QToolButton *pBtn,eBtnMoustState state,bool bInit/*=false*/) //获得图片路径 QString strImagePath = GetBtnImagePath(pBtn,bInit); //创建QPixmap对象 QPixmap objPixmap(strImagePath); //得到图像宽和高 int nPixWidth = objPixmap.width(); int nPixHeight = objPixmap.height(); //如果状态不是无效值 if(state!=eBtnStateNone) /*设置按钮图片 按钮的图片是连续在一起的,如前1/4部分表示默认状态下的图片部分,接后的1/4部分表示鼠标移到按钮状态下的图片部分 pBtn->setIcon(objPixmap.copy((nPixWidth/4)*(state-1),0,nPixWidth/4,nPixHeight)); //设置按钮图片大小 pBtn->setIconSize(QSize(nPixWidth/4,nPixHeight));}

View Code

//获得图片路径(固定值)const QString TitleBar::GetBtnImagePath(QToolButton *pBtn,bool bInit/*=false*/) QString strImagePath; //皮肤按钮 if(m_pBtnSkin==pBtn) strImagePath = ":/image/SkinButtom.png"; //菜单按钮 if(m_pBtnMenu==pBtn) strImagePath = ":/image/title_bar_menu.png"; //最小化 if(m_pBtnMin==pBtn) strImagePath = ":/image/sys_button_min.png"; //最大化/还原按钮,所以包括最大化和还原两张图片 if(m_pBtnMax==pBtn) //如果是初始设置或者主界面的最大化标志不为真(其中MainWindow::Instance()使用单例设计模式) if(bInit==true || MainWindow::Instance()->GetMaxWin()==false) //最大化按钮图片路径 strImagePath = ":/image/sys_button_max.png"; else //还原按钮图片路径 strImagePath = ":/image/sys_button_restore.png"; //关闭按钮 if(m_pBtnClose==pBtn) strImagePath = ":/image/sys_button_close.png"; return strImagePath;}

二、设置按钮其他效果

各位在使用360安全卫士的时候,把鼠标移到关闭按钮上或者使用鼠标按下关闭按钮,其呈现不同的图片以示区分,当然其他按钮也一样。

那么是不是也和工具栏按钮一样,子类化一个按钮了?不需要。

使用事件过滤器,在标题栏部件中进行事件判断和目标判断即可。

首先是创建事件过滤器,代码如下所示:

View Code

//创建事件过滤器void TitleBar::CreateEventFiter() m_pBtnSkin->installEventFilter(this); m_pBtnMenu->installEventFilter(this); m_pBtnMin->installEventFilter(this); m_pBtnMax->installEventFilter(this); m_pBtnClose->installEventFilter(this);}

然后在标题栏部件中重写eventFilter函数即可,代码如下:

View Code

//事件过滤bool TitleBar::eventFilter(QObject *obj, QEvent *event) //按钮状态 eBtnMoustState eState = eBtnStateNone; //判断事件类型--QEvent::Enter if (event->type() == QEvent::Enter) eState = eBtnStateHover; //判断事件类型--QEvent::Leave if (event->type() == QEvent::Leave) eState = eBtnStateDefault; //判断事件类型--QEvent::MouseButtonPress if (event->type() == QEvent::MouseButtonPress && ((QMouseEvent*)(event))->button()== Qt::LeftButton) eState = eBtnStatePress; //判断目标 if(m_pBtnSkin==obj || m_pBtnMenu==obj || m_pBtnMin==obj || m_pBtnMax==obj || m_pBtnClose==obj) //如果状态有效 if(eState != eBtnStateNone) //根据状态设置按钮图标 SetBtnIcon((QToolButton *)obj,eState); return false; return QWidget::eventFilter(obj,event);}

即根据事件类型设置按钮状态;最后在各个按钮的click槽函数中实现相应功能即可,如窗口关闭,最大化等。

View Code

//槽函数--slot_btnclickvoid TitleBar::slot_btnclick() QToolButton *pBtn = (QToolButton*)(sender()); if(pBtn==m_pBtnMin) emit signal_min(); if(pBtn==m_pBtnMax) emit signal_maxrestore(); if(pBtn==m_pBtnClose) emit signal_close();}

上述代码实现是发送自定义信号;状态栏部分由于很简单就不描述了。

完美,实现,360,安全,卫士,主,界面,标题栏,这篇,

十八世纪的意大利做干了哪些事情 为什么能够实现统一呢

话说,自成立以后,终于先是在公元1866年的时候从奥地利手里收回了威尼斯,接着就又在公元1870年的时候,收回了教皇的辖区,实现了全境的统一。

那么,这究竟是怎么回事呢?下面我们就一起前往查看一番。

首先,让我们先将目光移到公元1860年5月6日的早晨,就会发现,在意大利热那亚城外的港口,有两艘旧船正稳稳地停着,似乎在等待着什么重要任务。

而此时,1000多名身穿红衬衫,头戴阔边帽的意大利人则迅速登上了这两艘船。

接着,只见有一个中年人在大声呼喊:“为解放西西里岛的同胞,为意大利的统一,前进!”然后,轮船就像飞一样,消失在了漆黑的海洋里。

那么,这又是咋回事呢?原来那个高喊口号的中年人叫加里波第。

他生于1807年,是一个水手出身。

青年的时候就由于在反对外国占领者的过程中失败而逃到了拉丁美洲,然后,在1848年回国以后,就成为了意大利统一运动的领导者。

要知道,统一对于当时的意大利而言非常重要。

因为当时的意大利至少也分裂为了数个小国。

而北部的几个小国则被奥地利占领,南部的西西里王国则被西班牙占领,中部地区则归属于教皇管理,可以说是。

因此,当西西里王国的许多爱国老百姓听闻有意大利统一运动的武装力量前来的时候,都感到格外高兴。

他们马上就兴高采烈地到码头迎接,而见面之后,便开始商量对策。

但就在此时,炮声响了。

原来殖民者西班牙已经知道了意大利统一运动武装已经到达了西西里岛的消息,他们马上派遣部队前来攻击。

但是,令人可笑的是,正当加里波第他们想要还击的时候,敌人的炮声却突然停了。

原来港口内还有两艘英国商船,他们刚提出抗议,西班牙的士兵们便不敢再进行攻击了。

于是,加里波第的红衫军就很快就以港口为基地,借机又扩大了规模,接着,在实力大增之后,加里波第便下令向西西里岛的首府巴勒莫进军。

但是,当他们刚刚出发在进军的路上,就遇到了一座梯形的高山,山上则有两倍于红衫军的敌人占领。

按道理说,一看这情况,红衫军就应该退缩了。

然而,加里波第的红衫军却并没有退缩。

在经过了一阵猛冲猛打之后,红衫军就占领了这一座高山。

然后,兵临首府巴勒莫。

于是,5月27日的凌晨,天还没有亮,总攻就开始了!在持续了两天两夜的战斗后,西班牙占领军和西西里王国的反动军队是死的死,逃的逃,红衫军取得了胜利。

但是,为了不让敌人有喘息的机会,当年的八月,加里波第就带领着红衫军向着西西里王国的首都那不勒斯进军。

随后,在当地人民的支持下,那不勒斯也获得了解放。

然后,1860年11月初的一天,意大利新国王厄马努埃尔便和意大利统一运动的最高首领加里波第手拉手走在了那不勒斯的大街上,接受全市人民对他们得热烈欢迎。

至此,意大利开始走向了统一之路。

总之,十八世纪的意大利为何能够实现全境统一?来源于意大利人民不屈不挠的战斗意志。

随机文章塞普蒂米乌斯·西弗勒斯拱门简介日本富士山简介详解c5运输机和c17的区别,造价3亿美元的C17性能更优尼古拉特斯拉有多恐怖,击败爱迪生成为现代电气学之父地表喀斯特地貌类型,喀斯特地貌的形成过程(大自然风化而成)

如何利用360急救盘重装系统快速恢复电脑性能指导

想重装系统不会怎么办?菜科网一键重装系统轻松在线帮您搞定系统重装问题。

软件支持 在线重装、U盘制作、自定义重装 等多种模式。

简介:现代社会中,计算机的性能对于日常生活和工作至关重要。

对于系统性能下降问题,很多用户会选择重装系统以恢复性能。

360急救盘是一款广受欢迎的系统恢复工具,能够帮助用户快速便捷地重装操作系统,提升电脑运行效率。

本文将详细介绍如何利用360急救盘重装系统,以快速恢复电脑性能的方法和步骤。

工具原料:系统版本:Windows 11或Windows 10品牌型号:适用于大多数标配Windows系统的笔记本和台式机,如华为MateBook X Pro 2022款戴尔XPS 13 Plus 2022软件版本:360急救盘最新版本(2023年更新)一、准备工作1、下载与安装:首先,您需要从官方网站下载360急救盘的最新版本。

注意,确保下载地点的安全性,以防止下载到恶意软件。

2、创建急救盘:安装完成后,使用软件功能创建一个急救盘。

您需要一个至少8GB容量的U盘来存储相关的系统镜像文件。

在创建过程中,360急救盘将会自动下载所需的系统文件并存储在U盘中。

二、重装系统的具体步骤1、进入BIOS:重装系统前,需要在您的电脑上进行BIOS设置。

关机后重启计算机,按下相应的快捷键(如F2或DEL键,具体取决于机型)进入BIOS设置界面。

2、设置U盘启动:在BIOS界面中,找到启动选项,优先选择USB设备启动。

保存此设置并退出。

将之前制作好的360急救盘U盘连接到计算机。

3、开始重装:重启计算机后,将直接从360急救盘启动。

根据提示启动360急救盘软件,选择“重装系统”选项。

根据您的需求,选择要安装的Windows版本,并确认开始重装。

4、系统安装:软件将会自动格式化系统盘,并安装新的Windows系统。

这一过程可能需要几十分钟,请耐心等待。

三、数据恢复与系统优化1、恢复重要数据:系统重装后,原有系统盘中的数据可能会被清除。

需提前备份重要数据。

若有必要,利用360急救盘提供的数据恢复工具尝试找回丢失的数据。

2、优化新系统:新系统安装完成后,首次启动进入桌面,建议进行一次全面的系统更新,以确保系统补丁和驱动程序的完整性。

此外,360安全卫士提供的优化功能也可以帮助您进一步提高系统响应速度。

拓展知识:1、360急救盘的作用不仅仅在于重装系统,它还可以用作系统修复及数据恢复工具。

在系统崩溃后无法正常启动的情况下,通过急救盘启动系统可以进行系统修复的尝试。

2、定期的系统维护和优化,比如清理无用文件、更新驱动程序和软件、定期杀毒等,可以有效防止电脑性能下降。

此外,硬件方面的升级,比如增加内存和更换SSD,也能显著提升电脑速度。

总结:360急救盘作为一款功能强大的系统工具,可以帮助用户简单快捷地重装系统,恢复电脑性能。

其操作便捷、功能全面,是处理系统问题的好帮手。

通过本文的指导,用户可以在短时间内解决大部分系统性能下降问题,并了解如何进一步优化电脑性能。

定期进行系统维护和合理的硬件升级,可以确保您的计算机始终处于最佳状态。

标签: 注意:本站所刊载的文章均为学习交流之用,请勿用于商业用途。

对于商业使用,请联系各自版权所有者,否则法律问题自行承担。

Windows7旗舰版密钥激活指南:全面解析与常见问题解决方案 系统之家win7重装全攻略:解决所有安装难题 如何利用360急救盘重装系统快速恢复电脑性能指导 分类于: 回答于:2024-12-19 简介:现代社会中,计算机的性能对于日常生活和工作至关重要。

对于系统性能下降问题,很多用户会选择重装系统以恢复性能。

360急救盘是一款广受欢迎的系统恢复工具,能够帮助用户快速便捷地重装操作系统,提升电脑运行效率。

本文将详细介绍如何利用360急救盘重装系统,以快速恢复电脑性能的方法和步骤。

工具原料:系统版本:Windows 11或Windows 10品牌型号:适用于大多数标配Windows系统的笔记本和台式机,如华为MateBook X Pro 2022款戴尔XPS 13 Plus 2022软件版本:360急救盘最新版本(2023年更新)一、准备工作1、下载与安装:首先,您需要从官方网站下载360急救盘的最新版本。

注意,确保下载地点的安全性,以防止下载到恶意软件。

2、创建急救盘:安装完成后,使用软件功能创建一个急救盘。

您需要一个至少8GB容量的U盘来存储相关的系统镜像文件。

在创建过程中,360急救盘将会自动下载所需的系统文件并存储在U盘中。

二、重装系统的具体步骤1、进入BIOS:重装系统前,需要在您的电脑上进行BIOS设置。

关机后重启计算机,按下相应的快捷键(如F2或DEL键,具体取决于机型)进入BIOS设置界面。

2、设置U盘启动:在BIOS界面中,找到启动选项,优先选择USB设备启动。

保存此设置并退出。

将之前制作好的360急救盘U盘连接到计算机。

3、开始重装:重启计算机后,将直接从360急救盘启动。

根据提示启动360急救盘软件,选择“重装系统”选项。

根据您的需求,选择要安装的Windows版本,并确认开始重装。

4、系统安装:软件将会自动格式化系统盘,并安装新的Windows系统。

这一过程可能需要几十分钟,请耐心等待。

三、数据恢复与系统优化1、恢复重要数据:系统重装后,原有系统盘中的数据可能会被清除。

需提前备份重要数据。

若有必要,利用360急救盘提供的数据恢复工具尝试找回丢失的数据。

2、优化新系统:新系统安装完成后,首次启动进入桌面,建议进行一次全面的系统更新,以确保系统补丁和驱动程序的完整性。

此外,360安全卫士提供的优化功能也可以帮助您进一步提高系统响应速度。

拓展知识:1、360急救盘的作用不仅仅在于重装系统,它还可以用作系统修复及数据恢复工具。

在系统崩溃后无法正常启动的情况下,通过急救盘启动系统可以进行系统修复的尝试。

2、定期的系统维护和优化,比如清理无用文件、更新驱动程序和软件、定期杀毒等,可以有效防止电脑性能下降。

此外,硬件方面的升级,比如增加内存和更换SSD,也能显著提升电脑速度。

总结:360急救盘作为一款功能强大的系统工具,可以帮助用户简单快捷地重装系统,恢复电脑性能。

其操作便捷、功能全面,是处理系统问题的好帮手。

通过本文的指导,用户可以在短时间内解决大部分系统性能下降问题,并了解如何进一步优化电脑性能。

定期进行系统维护和合理的硬件升级,可以确保您的计算机始终处于最佳状态。

菜科网系统致力于解决 Windows 系统重装解决方案,提供高效、安全、免费的系统重装服务。

加入收藏
               

Qt完美实现360安全卫士主界面标题栏

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录