QT学习(四)----360界面制作(1)
参照网上的资料,模仿了一份360新特效的界面。
源代码在:http://download.csdn.net/detail/zhangyang1990828/5238013
360真实效果:(最好自己打开360看看!!)



先上效果图。(纯UI)

(现在没有任何的功能,之后再陆续添加,这样做比较好理解)
首先需要绘制Frame,就是看到的整个窗口。它是由两个圆角矩形组合起来的。
绘制代码如下:
- void DataBrain::paintEvent(QPaintEvent *)
- {
- QBitmap bitmap(this->size());//创建一个位图来存储这个组合体
- QPainter painter(&bitmap);//创建一个类似于绘画板的对象,通过它来在bitmap上绘图
- painter.fillRect(bitmap.rect(),Qt::white);
- painter.setBrush(QColor(0,0,0));
- painter.drawRoundRect(QRect(0,2,this->width(),this->height()-2),5,5);
- painter.drawRoundRect(QRect(20,0,100,2),2,2);
- setMask(bitmap);//将画好的bitmap遮挡在屏幕前方
- }
这样就绘制好了整个窗口的Frame,之后需要做的就是在这个Frame上贴图制作模糊透明效果的按钮。
背景其实就是将两张图片分别存储到两个label中,让后通过setGeometry将label放到指定的位置。两张是因为之后要实现动态的效果,所以要两张。(往后看就明白了)
上代码:
- void DataBrain::createFrame()
- {
- this->setWindowTitle(tr("DataBrain"));
- this->resize(QSize(WINDOW_WIDTH,WINDOW_HEIGHT));
- setWindowFlags(Qt::FramelessWindowHint);//设置窗口的样式
- m_pLabelBkTop=new QLabel(this);
- m_pLabelBkTop->setPixmap(QPixmap(":/images/images/bg_top.png"));
- m_pLabelBkTop->setGeometry(QRect(0,2,this->width(),this->height()-2));//在目标区域显示label
- m_pLabelBkBottom=new QLabel(this);
- m_pLabelBkBottom->setPixmap(QPixmap(":/images/images/bg_bottom.png"));
- m_pLabelBkBottom->setGeometry(QRect(0,2,this->width(),this->height()-2));
- }
为了实现最后的拖动效果,我们需要将前景的四张拖动出现的图合并成一张。
窗口上的显示“360安全桌面”“木马防火墙”..的按钮的实现,我们将这种按钮抽象成一个类,方便以后的调用。
之后只要将这类按钮的对象布局到这个窗口上就实现了前面实现的效果了(纯UI)。
按钮类里的函数:(不贴全部代码了,需要的去http://download.csdn.net/detail/zhangyang1990828/5238013下载
- void DataBrain::createWidget()//四张图片合并一个pixmap
- {
- QPixmap pixmap(QSize(this->width()*WINDOW_PAGE_COUNT,WINDOW_HEIGHT-2));
- QPainter painter(&pixmap);
- for(int i=0;i<WINDOW_PAGE_COUNT;i++)
- {
- painter.drawImage(QRect(WINDOW_WIDTH*i,0,WINDOW_WIDTH,WINDOW_HEIGHT-2),QImage(tr(":/images/images/desktop_%1.jpg").arg(i)));
- }
- m_pLabelFg=new QLabel(this);
- m_pLabelFg->resize(pixmap.size());
- m_pLabelFg->setPixmap(pixmap);
- m_pLabelFg->move(WINDOW_START_X,WINDOW_START_Y);
- QStringList nameList;
- nameList << tr("360安全桌面 ")
- << tr("木马防火墙 ")
- << tr("360保镖 ")
- << tr("电脑门诊 ");
- for(int i=0;i<WINDOW_BUTTON_COUNT;i++)
- {
- CLabel *label=new CLabel(this);
- label->resize(QSize(155,45));
- label->setPixmap(QPixmap(tr(";/images/images/btn_%1.png").arg(i)));
- label->setText(nameList.at(i));
- label->move(8+i*170,319);
- m_pLabelBtnArray[i]=label;
- }
- m_pCloseBtn=new QToolButton(this); //关闭按钮
- m_pCloseBtn->setFocusPolicy(Qt::NoFocus);
- m_pCloseBtn->setStyleSheet("background:transparent;border:0px;");
- setButtonIcon(m_pCloseBtn, EButtonMouseDefault);
- m_pCloseBtn->move(QPoint(this->width()-52,1));
- //raise widget
- m_pLabelBkTop->raise();
- m_pCloseBtn->raise();
- for (int i = 0; i < WINDOW_BUTTON_COUNT; i++)
- {
- m_pLabelBtnArray[i]->raise();
- }
- }
- void DataBrain::createFilter()
- {
- }
- void DataBrain::setButtonIcon(QToolButton *btn, EButtonMouseState state)
- {
- QPixmap pixmap(":/images/images/btn_close.png");//自定义关闭按钮
- int nWidth = pixmap.width()/4;
- int nHeight = pixmap.height();
- btn->setIcon(QIcon(pixmap.copy(QRect(state * nWidth, 0, nWidth, nHeight))));
- btn->setIconSize(QSize(nWidth, nHeight));
- }
这样就完成了360新特性界面的纯UI实现。
下一章实现窗口的拖拽等功能。
QT学习(四)----360界面制作(1)的更多相关文章
- QT学习(五)----360界面制作(2终结)
继续上一章的360新特性界面.源代码:http://download.csdn.net/detail/zhangyang1990828/5241242 上一章中实现了整个界面的纯UI设计,这次我们让它 ...
- qt学习 (五) 登陆界面之连接按钮
登陆步骤是比对输入的账号密码与数据库中的表项目是否一致 一样, 跳出mainwidget对话框 不一样,跳出消息错误框 今天就是要进去, 因为进去以后是widget的窗口,所以把用来核对消息的数据库 ...
- Qt学习(四)—实例涂鸦画板mspaint
一.Qt图形绘制 自己在Qt开源社区在自学yafeilinux前辈的<Qt快速入门系列教程>中的图形篇,结合所学的知识,可以做一个涂鸦板实例 二.实现涂鸦板 1.新建工程mspaint, ...
- Qt之实现360安全卫士主界面代码开源
匆匆一年又过去了,总结去年一年的节奏就是忙爆了:生活忙.工作忙,值得庆幸的是没有瞎忙:今天打开博客园查看我的博客,才发现几乎差不多一年时间没写博客了:博客文章就是记忆,就是曾经努力过的见证,感谢博客园 ...
- 第15.10节 PyQt(Python+Qt)入门学习:Qt Designer可视化设计界面组件与QWidget类相关的组件属性详解
PyQt学习有阵子了,对章节的骨架基本考虑好了,准备本节就写组件的属性的,结果一是日常工作繁忙,经常晚上还要加班,二是Qt的组件属性很多,只能逐一学习.研究和整理,花的时间有点长,不过终于将可视化设计 ...
- QT学习之第一个程序
QT学习之第一个程序 目录 手动创建主窗口 居中显示 添加窗口图标 显示提示文本 Message Box的应用 手动连接信号与槽 手动创建主窗口 窗口类型 QMainWindow: 可以包含菜单栏.工 ...
- Qt 学习之路 2(51):布尔表达式树模型
Qt 学习之路 2(51):布尔表达式树模型 豆子 2013年5月15日 Qt 学习之路 2 17条评论 本章将会是自定义模型的最后一部分.原本打算结束这部分内容,不过实在不忍心放弃这个示例.来自于 ...
- Qt 学习之路 2(27):渐变
Qt 学习之路 2(27):渐变 豆子 2012年11月20日 Qt 学习之路 2 17条评论 渐变是绘图中很常见的一种功能,简单来说就是可以把几种颜色混合在一起,让它们能够自然地过渡,而不是一下子变 ...
- Qt 学习之路 2(10):对象模型
Home / Qt 学习之路 2 / Qt 学习之路 2(10):对象模型 Qt 学习之路 2(10):对象模型 豆子 2012年9月2日 Qt 学习之路 2 45条评论 标准 C++ 对象模 ...
随机推荐
- java+mybatis实现一个简单的银行系统,实现存取款与账户查询
先创建数据库和表,使用的是MySQL数据库. create database mybatis; use mybatis; CREATE TABLE `accountdo` ( `id` varchar ...
- 从Hadder看蛋白质分子中的加氢算法
技术背景 PDB(Protein Data Bank)是一种最常用于存储蛋白质结构的文件.而我们在研究蛋白质构象时,往往更多的是考虑其骨架,因此在很多pdb文件中直接去掉了氢原子.但是在我们构建蛋白质 ...
- sql-扩展sql
复制表结构 create table 表名 like 被复制的表名; -- 仅复制表表结构 oracle不支持 复制表结构和数据(子查询方式) CREATE TABLE 表名 [AS] SELECT ...
- 如何用python做出老师看了都给满分的GUI学生管理系统毕设
序 言 哈喽大家好鸭!我是小熊猫 最近有什么有趣的事情发生吗?快来说给我听听( •̀ ω •́ )✧表弟大学快毕业了,学了一个学期Python居然还不会写学生管理系统,真的给我丢脸啊,教他又不肯学,还 ...
- Python教程——常用的os操作详情
Python自动的os库是和操作系统交互的库,常用的操作包括文件/目录操作,路径操作,环境变量操作和执行系统命令等. 文件/目录操作 获取当前目录(pwd): os.getcwd() 切换目录(cd) ...
- EasyExcel使用
将下面三层结合起来,请放心食用. 一.controller层 @RestController public class EasyExcelController { private Logger log ...
- 12.1 Android Studio如何手动下载Gradle文件
实际操作过程中,可能由于各方面原因,导致Gradle无法下载,或者下载比较慢,这个时候,其实我们可以手动下载,或者找一个最近的版本,替换他. 确认要下载的版本 不论是用命令编译Android项目,还是 ...
- P2599 [ZJOI2009]取石子游戏 做题感想
题目链接 前言 发现自己三岁时的题目都不会做. 我发现我真的是菜得真实. 正文 神仙构造,分讨题. 不敢说有构造,但是分讨我只服这道题. 看上去像是一个类似 \(Nim\) 游戏的变种,经过不断猜测结 ...
- P1189 SEARCH—搜索
将这题加进来的原因 因为他的优化令人眼前一新! 题目传送门() 相似的题目之 血色先锋队 ↑这一题也要用到标记数组 优化!!! 对于一个位置, 如果他在同样的深度再一次被访问,那他接下来所走的路径,所 ...
- BZOJ1874 「一本通 6.7 练习 1」【一本通提高博弈论】取石子游戏
「一本通 6.7 练习 1」取石子游戏 题目描述 小H和小Z正在玩一个取石子游戏. 取石子游戏的规则是这样的,每个人每次可以从一堆石子中取出若干个石子,每次取石子的个数有限制,谁不能取石子时就会输掉游 ...