参照网上的资料,模仿了一份360新特效的界面。

源代码在:http://download.csdn.net/detail/zhangyang1990828/5238013

360真实效果:(最好自己打开360看看!!)

先上效果图。(纯UI)

(现在没有任何的功能,之后再陆续添加,这样做比较好理解)

首先需要绘制Frame,就是看到的整个窗口。它是由两个圆角矩形组合起来的。

绘制代码如下:

  1. void DataBrain::paintEvent(QPaintEvent *)
  2. {
  3. QBitmap bitmap(this->size());//创建一个位图来存储这个组合体
  4. QPainter painter(&bitmap);//创建一个类似于绘画板的对象,通过它来在bitmap上绘图
  5. painter.fillRect(bitmap.rect(),Qt::white);
  6. painter.setBrush(QColor(0,0,0));
  7. painter.drawRoundRect(QRect(0,2,this->width(),this->height()-2),5,5);
  8. painter.drawRoundRect(QRect(20,0,100,2),2,2);
  9. setMask(bitmap);//将画好的bitmap遮挡在屏幕前方
  10. }

这样就绘制好了整个窗口的Frame,之后需要做的就是在这个Frame上贴图制作模糊透明效果的按钮。

背景其实就是将两张图片分别存储到两个label中,让后通过setGeometry将label放到指定的位置。两张是因为之后要实现动态的效果,所以要两张。(往后看就明白了)

上代码:

  1. void DataBrain::createFrame()
  2. {
  3. this->setWindowTitle(tr("DataBrain"));
  4. this->resize(QSize(WINDOW_WIDTH,WINDOW_HEIGHT));
  5. setWindowFlags(Qt::FramelessWindowHint);//设置窗口的样式
  6. m_pLabelBkTop=new QLabel(this);
  7. m_pLabelBkTop->setPixmap(QPixmap(":/images/images/bg_top.png"));
  8. m_pLabelBkTop->setGeometry(QRect(0,2,this->width(),this->height()-2));//在目标区域显示label
  9. m_pLabelBkBottom=new QLabel(this);
  10. m_pLabelBkBottom->setPixmap(QPixmap(":/images/images/bg_bottom.png"));
  11. m_pLabelBkBottom->setGeometry(QRect(0,2,this->width(),this->height()-2));
  12. }

为了实现最后的拖动效果,我们需要将前景的四张拖动出现的图合并成一张。

窗口上的显示“360安全桌面”“木马防火墙”..的按钮的实现,我们将这种按钮抽象成一个类,方便以后的调用。
之后只要将这类按钮的对象布局到这个窗口上就实现了前面实现的效果了(纯UI)。

按钮类里的函数:(不贴全部代码了,需要的去http://download.csdn.net/detail/zhangyang1990828/5238013下载

  1. void DataBrain::createWidget()//四张图片合并一个pixmap
  2. {
  3. QPixmap pixmap(QSize(this->width()*WINDOW_PAGE_COUNT,WINDOW_HEIGHT-2));
  4. QPainter painter(&pixmap);
  5. for(int i=0;i<WINDOW_PAGE_COUNT;i++)
  6. {
  7. painter.drawImage(QRect(WINDOW_WIDTH*i,0,WINDOW_WIDTH,WINDOW_HEIGHT-2),QImage(tr(":/images/images/desktop_%1.jpg").arg(i)));
  8. }
  9. m_pLabelFg=new QLabel(this);
  10. m_pLabelFg->resize(pixmap.size());
  11. m_pLabelFg->setPixmap(pixmap);
  12. m_pLabelFg->move(WINDOW_START_X,WINDOW_START_Y);
  13. QStringList nameList;
  14. nameList << tr("360安全桌面 ")
  15. << tr("木马防火墙  ")
  16. << tr("360保镖     ")
  17. << tr("电脑门诊    ");
  18. for(int i=0;i<WINDOW_BUTTON_COUNT;i++)
  19. {
  20. CLabel *label=new CLabel(this);
  21. label->resize(QSize(155,45));
  22. label->setPixmap(QPixmap(tr(";/images/images/btn_%1.png").arg(i)));
  23. label->setText(nameList.at(i));
  24. label->move(8+i*170,319);
  25. m_pLabelBtnArray[i]=label;
  26. }
  27. m_pCloseBtn=new QToolButton(this); //关闭按钮
  28. m_pCloseBtn->setFocusPolicy(Qt::NoFocus);
  29. m_pCloseBtn->setStyleSheet("background:transparent;border:0px;");
  30. setButtonIcon(m_pCloseBtn, EButtonMouseDefault);
  31. m_pCloseBtn->move(QPoint(this->width()-52,1));
  32. //raise widget
  33. m_pLabelBkTop->raise();
  34. m_pCloseBtn->raise();
  35. for (int i = 0; i < WINDOW_BUTTON_COUNT; i++)
  36. {
  37. m_pLabelBtnArray[i]->raise();
  38. }
  39. }
  40. void DataBrain::createFilter()
  41. {
  42. }
  43. void DataBrain::setButtonIcon(QToolButton *btn, EButtonMouseState state)
  44. {
  45. QPixmap pixmap(":/images/images/btn_close.png");//自定义关闭按钮
  46. int nWidth = pixmap.width()/4;
  47. int nHeight = pixmap.height();
  48. btn->setIcon(QIcon(pixmap.copy(QRect(state * nWidth, 0, nWidth, nHeight))));
  49. btn->setIconSize(QSize(nWidth, nHeight));
  50. }

这样就完成了360新特性界面的纯UI实现。

下一章实现窗口的拖拽等功能。

QT学习(四)----360界面制作(1)的更多相关文章

  1. QT学习(五)----360界面制作(2终结)

    继续上一章的360新特性界面.源代码:http://download.csdn.net/detail/zhangyang1990828/5241242 上一章中实现了整个界面的纯UI设计,这次我们让它 ...

  2. qt学习 (五) 登陆界面之连接按钮

    登陆步骤是比对输入的账号密码与数据库中的表项目是否一致 一样,  跳出mainwidget对话框 不一样,跳出消息错误框 今天就是要进去, 因为进去以后是widget的窗口,所以把用来核对消息的数据库 ...

  3. Qt学习(四)—实例涂鸦画板mspaint

    一.Qt图形绘制 自己在Qt开源社区在自学yafeilinux前辈的<Qt快速入门系列教程>中的图形篇,结合所学的知识,可以做一个涂鸦板实例 二.实现涂鸦板 1.新建工程mspaint, ...

  4. Qt之实现360安全卫士主界面代码开源

    匆匆一年又过去了,总结去年一年的节奏就是忙爆了:生活忙.工作忙,值得庆幸的是没有瞎忙:今天打开博客园查看我的博客,才发现几乎差不多一年时间没写博客了:博客文章就是记忆,就是曾经努力过的见证,感谢博客园 ...

  5. 第15.10节 PyQt(Python+Qt)入门学习:Qt Designer可视化设计界面组件与QWidget类相关的组件属性详解

    PyQt学习有阵子了,对章节的骨架基本考虑好了,准备本节就写组件的属性的,结果一是日常工作繁忙,经常晚上还要加班,二是Qt的组件属性很多,只能逐一学习.研究和整理,花的时间有点长,不过终于将可视化设计 ...

  6. QT学习之第一个程序

    QT学习之第一个程序 目录 手动创建主窗口 居中显示 添加窗口图标 显示提示文本 Message Box的应用 手动连接信号与槽 手动创建主窗口 窗口类型 QMainWindow: 可以包含菜单栏.工 ...

  7. Qt 学习之路 2(51):布尔表达式树模型

    Qt 学习之路 2(51):布尔表达式树模型 豆子 2013年5月15日 Qt 学习之路 2 17条评论 本章将会是自定义模型的最后一部分.原本打算结束这部分内容,不过实在不忍心放弃这个示例.来自于 ...

  8. Qt 学习之路 2(27):渐变

    Qt 学习之路 2(27):渐变 豆子 2012年11月20日 Qt 学习之路 2 17条评论 渐变是绘图中很常见的一种功能,简单来说就是可以把几种颜色混合在一起,让它们能够自然地过渡,而不是一下子变 ...

  9. Qt 学习之路 2(10):对象模型

    Home / Qt 学习之路 2 / Qt 学习之路 2(10):对象模型 Qt 学习之路 2(10):对象模型  豆子  2012年9月2日  Qt 学习之路 2  45条评论 标准 C++ 对象模 ...

随机推荐

  1. 令你瞠目结舌的 Python 代码技巧

    0. for-else 在 Python 中,else 不仅可以与 if 搭配使用,还可以与 for 结合. python答疑 咨询 学习交流群2:660193417### for x in rang ...

  2. 所有人都说Python 简单易学,为何我觉得难?

    来谈谈心 记得刚学Python的时候,几乎所有人都说Python 简单易学,而对于编程零基础,只掌握Word和Excel的人来说,感觉真的好难. 学习之前网上的教材看了,Python的书也看了,包括& ...

  3. C语言输出九九乘法表

    C语言学了有一阵子了,趁着假期没事练练手,没想到挺简单 基本思路是这样的 先写一个主函数,然后定义两个变量i1和i2;使用for语句循环嵌套,外层循环负责写循环9次,内循环里面写从1开始递增去和外层循 ...

  4. 零基础学Java(3)运算符

    运算符 运算符用于连接值.Java提供了一组丰富的算术和逻辑运算符以及数学函数. 算术运算符 在Java中,使用算术运算符+.-.*./表示加.减.乘.除运算.当参与/运算的两个操作数都是整数时,表示 ...

  5. 爬虫(14) - Scrapy-Redis分布式爬虫(1) | 详解

    1.什么是Scrapy-Redis Scrapy-Redis是scrapy框架基于redis的分布式组件,是scrapy的扩展:分布式爬虫将多台主机组合起来,共同完成一个爬取任务,快速高效地提高爬取效 ...

  6. Tapdata 的 2.0 版 ,开源的 Live Data Platform 现已发布

    https://www.bilibili.com/video/BV1tT411g7PA/?aid=470724972&cid=766317673&page=1 点击上方链接,一分钟快速 ...

  7. javaWeb,web服务器

    一. 1.ASP 国内最早最流行的语言就是ASP:微软研发 在HTML中嵌套了VB脚本,ASP+COM(网页元素) 在ASP开发中,基本一个业务就有几千行代码,页面机器混乱 维护成本高 <h1& ...

  8. 基于MIndSpore框架的道路场景语义分割方法研究

    基于MIndSpore框架的道路场景语义分割方法研究 概述 本文以华为最新国产深度学习框架Mindspore为基础,将城市道路下的实况图片解析作为任务背景,以复杂城市道路进行高精度的语义分割为任务目标 ...

  9. GDOI 2022 普及组游记

    To LuoguDAY -1 期中考成绩下来了,全无了除了历史 (96) 和生物 (95) 还能看,剩下的-,语文 101.5 ,少错一道选择和断句就 107.5 了,居然比雌兔还低 数学少错一道选择 ...

  10. CF1593D2 Half of Same

    题目大意: 给定一个包含 \(n\)(\(n\) 是偶数)个整数的数列 \(a_1,a_2,\ldots,a_n\). 考虑一个可能的正整数 \(k\),在每次操作中,你可以选定一个 \(i\),并将 ...