其实网上有过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安全卫士主界面(标题栏)相关推荐

  1. Qt之实现360安全卫士主界面(转)

    Qt之实现360安全卫士主界面(一) 该博文只是模仿360安全卫士的主界面,并不牵涉其中的任何业务功能:重在个人见解以及界面实现:关于360安全卫士的主界面,我想大家都见到过,毕竟基本大部分人都安装过 ...

  2. Qt之实现360安全卫士主界面(四)

    这篇博文主要讲解360安全卫士标题栏的创建.关于标题栏,我想大家应该都非常熟悉了,其主要包括窗口关闭.最大化/还原.最小化等按钮:但是标题栏的这些按钮都是非常有特色的. 在我写这篇博文之前,我就已经完 ...

  3. Qt之实现360安全卫士主界面

    Qt之实现360安全卫士主界面(一) 该博文只是模仿360安全卫士的主界面,并不牵涉其中的任何业务功能:重在个人见解以及界面实现:关于360安全卫士的主界面,我想大家都见到过,毕竟基本大部分人都安装过 ...

  4. Qt之实现360安全卫士主界面(一)

    转自:http://www.cnblogs.com/appsucc/archive/2012/03/14/2395657.html 该博文只是模仿360安全卫士的主界面,并不牵涉其中的任何业务功能:重 ...

  5. Qt之实现360安全卫士主界面(三)

    这篇博文主要讲述360安全卫士工具栏的创建:工具栏由图片和文字组成,当鼠标移到工具栏按钮上时,需要有些特征表达该现象,如背景色变化等:当然鼠标单击工具栏按钮时,同样也要有些特征,并且这个特征区别于鼠标 ...

  6. Qt实现360安全卫士主界面(中央窗体)

    中央窗口可以分为左右两部分,左半边由QWidget实现,包含三个QLabel,一个QPushButton,QLabel主要用来显示图片,文本信息,还有一个按钮负责"立即体验". 右 ...

  7. 【360安全卫士显示界面异常解决】

    360安全卫士显示界面异常解决 问题/解决 首先打开360安全卫士,单击三横杠 选择设置 选择界面缩放,开启主界面自动缩放功能,点击确定 4.此时360安全卫士界面就显示正常了

  8. Qt实现360安全卫士登录界面

    在分享之前,我们先看截图,用事实说话,有图有真相! 通过点击底部栏的新浪,人人按钮来进行3个界面的互相切换,进行用户删除时,自定义的QDialog用于和用户交互,通过exec()可进入堵塞状态. 界面 ...

  9. mfc界面的onvscroll没反应_电脑小技巧之360安全卫士卸载不掉怎么办?只因一个开关没打开...

    目前电脑操作做系统基本都是使用的win10系统,而win10本身的安全系windows defender也非常实用,磁盘清理,uac之类的功能大部分都有,基本可以替换掉某些安全卫士的大部分功能,所以就 ...

最新文章

  1. 安装node和spm过程
  2. 破2.5万亿美元,全球市值第一「巨无霸」尾随Meta杀入元宇宙!
  3. bzoj - 2038: [2009国家集训队]小Z的袜子(hose)
  4. 旅馆客未满 计算机术语,前厅测试题
  5. python 粒子动画_python-盒子中有很多粒子-物理模拟
  6. oracle查询语句子句,Oracle 查询执行顺序
  7. minist _On_[GoogleNet]
  8. redux-form(V7.4.2)笔记(三)之Flow简介
  9. 工时分析怎么分析?分享:实用的工时分析方法及软件工具!
  10. python统计字符个数然后变成字典_Python之String字符串练习一(统计字符串中单词出现个数并生成字典、打印下一秒钟时间、简单购物车功能)...
  11. JavaWeb课堂笔记
  12. linux读取excel文件内容,如何读取EXCEL文件到内表
  13. 传统语音识别介绍【四】—— 语言模型
  14. 不改一行代码!快速迁移 Flask 应用上云
  15. 良心推荐:看完这20部BBC神级纪录片,英语水平提升几个Level!
  16. 不服丨月薪10k程序员vs月薪40K的程序员
  17. matlab修改坐标轴刻度间隔大小
  18. 高等数学(下)空间解析几何与向量代数
  19. 【Babylonjs】材质
  20. 扫地机器人如何取下蓄水器_斐纳扫地机器人水箱怎么用_科沃斯扫地机器人水箱_扫地机器人水箱怎么卸...

热门文章

  1. 《关于我的同学被邪神附体这档事》
  2. SQL注入之注入原理
  3. python判断设备是否联网
  4. python对两个list取交集、并集、和异或
  5. WP7开发系列——Windows Phone 7 开发环境搭建
  6. 物联卡流量卡是什么?如何抓住物联卡的应用场景与使用人群?
  7. 7z.001....7z.002.....格式的分卷压缩包
  8. iPhone6,更为完美
  9. python天气数据分析论文_《Python数据分析与机器学习实战-唐宇迪》读书笔记第9章--随机森林项目实战——气温预测(2/2)...
  10. Pycharm 手动程序包安装