转自:http://www.cnblogs.com/appsucc/archive/2012/03/14/2395657.html

该博文只是模仿360安全卫士的主界面,并不牵涉其中的任何业务功能;重在个人见解以及界面实现;关于360安全卫士的主界面,我想大家都见到过,毕竟基本大部分人都安装过这个软件,基于我对其界面的个人见解,对主界面分割为四部分:分别为标题栏、工具栏、内容区域、状态栏,分割图例如下图所示:

由于标题栏、工具栏、内容区域和状态栏都不是标准的部件,因此只能子类化部件进行自定义开发;主窗口继承于QFrame,而标题栏、工具栏、内容区域与状态栏都继承于QWidget;最后在主窗口中使用QVBoxLayout布局将其他部件加入到该布局中即可,其中标题栏和工具栏以及状态栏都是固定高度的,宽度和内容区域是随窗口缩放而缩放的。
      使用Qt实现主界面的效果如下图所示(按【Alt+F4】键退出主界面):

大家可以对比一下,如果在该界面中再添加一些内容,就会越来越像了,后续博文会继续添加内容。
      下面讲解具体实现方法,当然方法不只一种,也欢迎各位博友提出自己的看法与实现方式。

1、自定义主窗口

标题栏属于操作系统,我们不能控制标题栏;因此要去掉窗口默认的标题栏,我们使用Qt::FramelessWindowHint窗口样式即可,这样就没有了默认的标题栏,这时需增加我们自定义的标题栏部件即可,再依次增加其他部件到布局中;这些都是很基本的,不多阐述,代码如下:

setWindowFlags(Qt::FramelessWindowHint);
//创建标题栏
m_pTitleBar = new TitleBar(this);
//创建工具栏
m_pToolBar = new ToolBar(this);
//创建内容区域
m_pContentWidget = new ContentWidget(this);
//创建状态栏
m_pStatuBar = new StatuBar(this);//创建布局
m_pMainLayout = new QVBoxLayout(this);
//将部件加入到布局中
m_pMainLayout->addWidget(m_pTitleBar);
m_pMainLayout->addWidget(m_pToolBar);
m_pMainLayout->addWidget(m_pContentWidget);
m_pMainLayout->addWidget(m_pStatuBar);
//设置间距与边缘空白
m_pMainLayout->setSpacing(0);
m_pMainLayout->setContentsMargins(0,0,0,0);

2、主窗口背景以及圆角实现
      主窗口背景使用图片平铺实现,当然使用Qt的样式表是最为简单方便的了;Qt的样式表格式和css基本一致;如果对css熟悉的话,对Qt的样式表(qss)就会很快熟悉起来;

setStyleSheet("QFrame {background-image:url(:/image/frame.jpg);border:1px solid black;}");

360安全卫士的主界面是圆角的,我们的主界面当然也要实现圆角的了;在主窗口的重绘事件中添加如下代码即可:

//生成一张位图
QBitmap objBitmap(size());
//QPainter用于在位图上绘画
QPainter painter(&objBitmap);
//填充位图矩形框(用白色填充)
painter.fillRect(rect(),Qt::white);
painter.setBrush(QColor(0,0,0));
//在位图上画圆角矩形(用黑色填充)
painter.drawRoundedRect(this->rect(),10,10);
//使用setmask过滤即可
setMask(objBitmap);

3、主窗口大小

主窗口缩放到一定值之后便不能缩小,所以应该设置其最小宽度和高度;

setMinimumWidth(850);
setMinimumHeight(600);

OK,主界面基本看起来有点像样了,当然这个主界面还不能移动,不能缩放,没有工具栏等,这些功能在后续的博文中会阐述添加。

Qt之实现360安全卫士主界面(一)相关推荐

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

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

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

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

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

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

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

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

  5. qmainwindow 标题栏_Qt之360安全卫士主界面(标题栏)

    其实网上有过360界面一些小细节的实现,基本的也都比较简单,项目完事,闲来无事,就按照自己电脑的360安全卫士9.1做了一个界面,包括托盘.最小化.最大化.界面风格样式美化等! 效果如下: 有人可能会 ...

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

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

  7. 【Qt】仿360安全卫士界面(自定义阴影边框类)

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 自定义阴影边框类设计与实现 04. 测试代码 05. 示例下载 06. 附录 01. 概述 Qt默认的QDialog和QW ...

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

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

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

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

最新文章

  1. leetcode dfs_深度优先搜索:具有6个Leetcode示例的DFS图遍历指南
  2. golang 比较字符串 版本号大小
  3. DirectFB编译环境
  4. input的onkeyup效果 超级简短代码
  5. java 获取活动窗口_用Java获取活动窗口信息
  6. Protobuf序列化的原理-总结
  7. base64编码以及url safe base64是怎么工作的?
  8. 用于从文件读取/写入字符串的新JDK 11文件方法
  9. qt int转换成qstring_「QT界面编程实例」创建颜色下拉框并改变窗体颜色(调色板)...
  10. 蒜黄香菇炒肉 【原创】
  11. 声明式事务java_Spring声明式事务管理源码解读之事务开始
  12. ajax调用网易云APi遇到跨域问题
  13. linux可视化界面改ip,Linux图形界面模式更改ip地址
  14. 记录日常收支,查看每个账户收支明细
  15. 0ctf-2017-pwn-char 题解
  16. luogu1378 油滴扩展 (深搜)
  17. 橱柜图片-橱柜效果图-整体橱柜衣柜效果图如何选购
  18. CES2018,三星为何将MicroLED应用于电视而非手机?
  19. 2019双十一大战:苏宁的“1小时场景生活圈”诱惑
  20. 教你快速爬取哔哩哔哩整部番剧的视频弹幕

热门文章

  1. 【mimics基础中文版教程】
  2. SMS短信的PDU编码规则
  3. linux-3.4.2 smsc911x 网卡移植
  4. proteus用C语言实现LED闪烁,使用PROTEUS实现一个闪烁的LED基础教程
  5. iBatis入门例子,用ORACLE和Java测试
  6. 获取外网IP,再根据IP定位城市
  7. “说”——英语学习的另一转折点
  8. 疫情之下获中电科基金、元起资本投资,齐治凭什么?
  9. 罗斯蒙特压力变送器压力测量不准确的原因你都了解吗
  10. 手机短信数据恢复大全