用Qt实现一个桌面弹幕程序(六)-- -- 桌面客户端实现②
经过上面一篇教程,我们制作了一个标题栏~
如果没有为按钮设置三态图片的话,它应该是这个样子
按钮都是原生的样子,不是很好看。不过只要配上你的按钮图片就可以变得好看了~
来DIY自己的标题栏吧~
图片展示窗体
接下来要讲的是第二部分是一个展示图片的地方~
(等等,为什么要展示图片呢? -_-||| 杰洛君:我也忘了 kira☆~)
观察它你会看到背景又是一个渐变效果。
上面分别是两张图:1.没问题 2.大弹幕
这个时候你会想到和标题栏一样重载QWidget吗? 不要犹豫,上吧!!
放上核心的代码~
void MessageWidget::paintEvent(QPaintEvent *){this->setPaintStatus(0);//设置画笔QPen objPen(Qt::NoBrush,1);QPainter Painter(this);Painter.setPen(objPen);//设置渐变画刷QLinearGradient objLinear(rect().topLeft(),rect().bottomLeft());//顶部颜色和透明度objLinear.setColorAt(0,QColor(0,160,234,240));//中间颜色和透明度objLinear.setColorAt(0.9,QColor(51,122,183,255));//底部颜色和透明度objLinear.setColorAt(1,QColor(51,122,183,255));QBrush objBrush(objLinear);Painter.setBrush(objBrush);//画圆角矩形//Painter.drawRoundedRect(rect(),5,5);Painter.drawRect(rect());}
这个地方窗体的创建好后,固定好大小,然后加入到我们的 垂直布局 mainLayout中吧,记得mainLayout调用一下
- setSpacing(0);
- setMargin(0);
否则出现不必要的间隙就不好了~
具体如下
messageWidget = new MessageWidget(this);
messageWidget->setFixedHeight(350);d.load(":/project/meiyouDanmu"); //这里的d和g 是QPixmap类型g.load(":/project/dadanmu1");
leftCha = new QLabel(this); //用Label绘图 一个左边(果然。。。) 一个右边(大弹幕时代。。。)
leftCha->setPixmap(d);
leftCha->setFixedSize(d.size());rightCha = new QLabel(this);
rightCha->setPixmap(g);
rightCha->setFixedSize(g.size());QHBoxLayout * messageLayout = new QHBoxLayout;
messageLayout->setSpacing(0);
messageLayout->addWidget(leftCha);
messageLayout->addWidget(middleCha);
messageLayout->addStretch();
messageLayout->addWidget(rightCha);
messageWidget->setLayout(messageLayout); //最终把总布局放入相应的层QVBoxLayout * mainLayout = new QVBoxLayout();
mainLayout->setSpacing(0);
mainLayout->addWidget(titleWidget);
mainLayout->addWidget(messageWidget);mainLayout->setMargin(0);this->centralWidget()->setLayout(mainLayout); //最终把总布局放入相应的层,界面布局完成
小A:又开始水了。。。→_→
杰洛君:怎么会呢,重点在下面呢(慌张)
可能有的同学会发现自己用了上面的代码还是不能垂直布局,甚至有的出现了蓝色窗体盖住了标题栏导致不能关闭窗体。怎么办呢?
这时杰洛君感觉到这应该不是代码的问题,而是有什么东西杰洛君忽略了!
这时打开我们的mainwindow.ui 文件 看看左边窗体树 centralWidget图标下有没有一个禁止符号呢?
如果没有,那就请点击上方布局工具栏中的打破布局按钮吧~
为什么要这么做呢?
因为原有的布局使得我们不能设置杰洛君自定义的布局上去,所以要打破原有的布局,设置新的布局给MainWindow 中的CentralWidget窗体中。
要在这个窗体上放两张图就是在这个窗体上设置一个新的水平布局加上两个新的QLabel ,每个QLabel再设置不同图片并固定为图片大小就可以了,由于这些知识之前的文章都有给出,所以代码不再详述。
来重载一个事件函数
对于这个图片窗体,杰洛君是做了一个这样的处理,用定时器每隔1分钟换一张图。
这个要实现也不难。
用 QLabel::hide()函数,隐藏了窗体上的两个图片label后,图片窗体的QPainter不再绘制渐变背景。
而是画出图像来就可以了
代码也是非常耿直的:
QPixmap pixmap = QPixmap(":/new/mbg1").scaled(this->size());
QPainter painter(this);
painter.drawPixmap(this->rect(),pixmap);
这要切换状态,只需要一个整数来进行switch-case切换就可以了。
不过这似乎还不够好,不如直接重载这个主窗体的鼠标滑轮事件,根据滑轮来进行不同图片的切换不就好了吗?
马上动手:
protected:void wheelEvent(QWheelEvent *);
重载这个事件函数
实现它:
void MainWindow::wheelEvent(QWheelEvent * event)
{//就收鼠标滑轮的信号double numdegrees=event->delta()/8;qDebug()<<numdegrees;//Do somethingevent->accept();}
滑动鼠标滑轮有两种方式,在这里 杰洛君 姑且称之为向上滑
和 向下滑
此处event->delta()会返回一个整数,有正有负。
当鼠标滑轮在滚动时用于返回滑动的距离,该值等于鼠标旋转角度的8倍。
正数值表示滑轮相对于用户在向前滑动,
相反,负数值表示滑轮相对于用户是向后滑动的。
大多数鼠标工作在单步15度的情况下(意思是鼠标转轮滑动一圈是360度,细化成单步就是1度,那么鼠标转轮滑动一度对应于窗口界面单位尺度的8倍),在这种情况下,delta的返回值是120的倍数。计算公式:120 units/8=15度。
简单来讲呢,既然有正负之分,那就对应切换图片两种状态:
1.上一张 2.下一张
所以加个判断就可以了~
这样你就可以让你的程序响应滑鼠事件了~开不开心?O(∩_∩)O~~
后续
小C:经过这一章,界面布局变得更丑了。。。
杰洛君:啊啊啊~(大惊)不要着急,我们还有稍微复杂一点的控制台部分没讲呢。里面会涉及到布局之间的嵌套哦~
敬请期待吧~
用Qt实现一个桌面弹幕程序(六)-- -- 桌面客户端实现②相关推荐
- 用Qt实现一个桌面弹幕程序(五)-- -- 桌面客户端实现①
光实现弹幕还不够哦~桌面客户端也要做好看点才比较好用~ 接下来就跟随 杰洛君 一起实现一个QMainwindow 程序吧~ 拖控件与代码实现之间的比较 QMainWindow程序界面的编写在Qt中主要 ...
- 利用QT编写一个简单爬虫程序
从高中到大学,一直在固定小说网中下载小说,小说网停机过好几次但最后又起死回生.最近萌发一个想法,把小说网里的小说都爬下来.. 既然要爬网站肯定要对网站结构十分了解,幸好小说网没有弄什么登陆防爬措施,结 ...
- Windows桌面应用程序(1-2-4-2nd) 桌面窗口管理器
在Windows Vista之前,Windows程序会直接画到屏幕上.换句话说,程序会直接写入显卡所显示的内存缓冲区.如果窗口没有正确重绘,这种方法会导致视觉失真.例如,如果用户在另一个窗口上拖动了一 ...
- 如何在 Python 中构建跨平台桌面应用程序
如何在 Python 中构建跨平台桌面应用程序 开发桌面 GUI 应用程序曾经是一个乏味.容易出错且缓慢的过程. 当然,Python 在整体上极大地简化了应用程序开发,但在 GUI 领域,仍然没有真正 ...
- Qt安装和QML HelloWord程序
QT Win7开发环境安装配置 Qt是一个跨平台应用程序和用户界面框架,使用C + +或者QML,类似CSS和JavaScript开发语言. 它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功 ...
- Qt实现一个简单的应用程序——桌面助手
一.软件功能及涉及知识 1.实现不同功能之间的界面切换 2.可查看日历 3.可实现计时器功能 4.可实现计算器功能 5.ui界面及按钮部件背景的设置 6.为软件设置图标 7.程序打包成软件 二.效果演 ...
- 使用C++代码创建一个Windows桌面应用程序
下面六星教育整理使用C++代码创建一个Windows桌面应用程序,供大家学习参考. WinMain函数 Windows应用程序的唯一程序入口. 函数原型 int WINAPI WinMain { HI ...
- 桌面linux imx6q,SAIL-IMX6Q添加qt桌面应用程序
添加qt桌面应用程序比较繁琐,提起来大家都是相当头疼的一块项目,经过我一系列的摸索,终于学会了用imx6添加qt桌面应用程序. 文件夹设置存放在:/usr/share/matchbox/vfolder ...
- Qt Creator创建一个移动应用程序
Qt Creator创建一个移动应用程序 创建一个移动应用程序 搭建开发环境 创建项目 创建Accelbubble主视图 移动泡沫 锁定装置方向 添加依赖项 运行应用程序 创建一个移动应用程序 本教程 ...
- 使用PHP-GTK编写一个windows桌面应用程序
PHP-GTK的下载地址:http://gtk.php.net/download.php?language=en-US, 猿哥选择了最新版本(beta版),可能有人会问我们为啥不选最新的stable版 ...
最新文章
- python 轨迹识别
- cxLookupComboBox使用方法
- #1117. 编码 ( 字典树版 ) 题解分析
- CSS设计指南(读书笔记 - 背景)
- java计时器工作方法,java-摆动计时器如何工作?
- android listview 选中状态,Android:在ListView打开时将项目设置为选中状态?
- ps打开闪退_PS教程派 | 水花四溅的草莓切块效果,如此简单!
- 超神学院暗物质计算机,超神学院之进击的赛亚人
- 移位密码及其python实现
- SPHYSICS流体力学仿真模拟程序的动态链接库编译及C#混合编程方法
- C# 多张图片生成PDF
- java 打印 日历 详细 注解_Java实现按年月打印日历功能【基于Calendar】
- 百度K站之前兆与解决方案的另类分析
- 官方:长城保护坚持不改变原状、最低干预原则
- 2022快手春节跳一跳红包到 怎么获得66元红包?
- log4j2 概述、配置详情、日志八种输出级别讲解
- Java基于SM4算法实现文件加密 SM4FileUtils
- openfire开发
- 计算机埃尼阿克的主要元件采用的是,计算机埃尼阿克(ENIAC)的主要元件采用的是()。...
- Linux课堂笔记--第九天