QT:“下载速度柱状图”的模拟实现——思路真好,会动脑筋,连我都有了启发(这个思路好像是通用的)
不知是哪个版本的迅雷,有个“下载速度柱状图”的小界面,我比较喜欢(只不过最新版本的迅雷却没了),所以决定来山寨一个。当然,这个山寨品不能下载文件,呵呵。
思路:
1:将界面的背景涂成黑色
2:每隔0.1秒就产生一个随机数,将它们添加到一个容器中
3:重载paintEvent函数,,从界面的右边开始,依次将容器中的元素按倒序画出来(每个数据就是一个柱形)
截图:

代码:
- #include <QtGui>
- #include <QtCore>
- class BarChart : public QWidget
- {
- Q_OBJECT
- private:
- QList<int> m_List; //储存历史上所记录的那些点
- QSize m_Size; //当前绘图窗口的大小
- QTimer m_Timer; //定时器,每0.1秒发出一次信号,模拟收到数据
- protected:
- void paintEvent(QPaintEvent *event);
- void resizeEvent(QResizeEvent *event);
- public:
- BarChart(QWidget *parent = 0);
- ~BarChart() { }
- public slots:
- void AddDataSlot();
- };
- BarChart::BarChart(QWidget *parent)
- : QWidget(parent)
- {
- //定义定时器
- qsrand( QDateTime::currentDateTime().toMSecsSinceEpoch() );
- connect(&m_Timer, SIGNAL(timeout()), this, SLOT(AddDataSlot()));
- m_Timer.start(100);
- }
- void BarChart::paintEvent(QPaintEvent *event)
- {
- const int WIDTH = 2;
- QPainter painter(this);
- //设置背景为黑色
- painter.setBrush(Qt::black);
- painter.drawRect(-2, -2, m_Size.width()+4, m_Size.height()+4);
- painter.setPen( QPen(Qt::green, WIDTH) );
- int tx, cx, cy1, cy2;
- tx = 0;
- cy1 = m_Size.height();
- //画出各段竖线
- QList<int>::iterator iter = m_List.end();
- while( iter != m_List.begin() )
- {
- cy2 = cy1 - (*(--iter)*m_Size.height()/1000);
- cx = m_Size.width() - tx;
- painter.drawLine(cx, cy1, cx, cy2);
- tx += WIDTH;
- }
- }
- void BarChart::resizeEvent(QResizeEvent *event)
- {
- m_Size = event->size();
- update();
- }
- void BarChart::AddDataSlot()
- {
- //添加一个0-999的数据
- int temp = qrand() % 1000;
- m_List.push_back(temp);
- //如果数据太长了,就丢掉前面的那一部分
- if( m_List.size() > m_Size.width() )
- m_List.pop_front();
- update();
- }
- #include "main.moc"
- int main(int argc, char **argv)
- {
- QApplication app(argc, argv);
- BarChart *bar = new BarChart;
- bar->show();
- return app.exec();
- }
http://blog.csdn.net/small_qch/article/details/7585758
QT:“下载速度柱状图”的模拟实现——思路真好,会动脑筋,连我都有了启发(这个思路好像是通用的)的更多相关文章
- Qt无边框窗体-模拟模态窗体抖动效果
目录 一.概述 二.效果展示 三.功能实现 四.相关文章 原文链接:Qt无边框窗体-模拟模态窗体抖动效果 一.概述 用Qt开发windows客户端界面确实是一大利器,兼顾性能的同时,速度相对来说也不错 ...
- PAT 甲级 1017 Queueing at Bank (25 分)(模拟题,有点思维小技巧,第二次做才理清思路)
1017 Queueing at Bank (25 分) Suppose a bank has K windows open for service. There is a yellow line ...
- QT下载速度慢的解决方法
在官网的下载速度实在太慢了 找到了一个镜像网站 https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/
- QT自定义窗口(模拟MainWindow)
在这里自定义窗口是通过继承于QFrame,内部分为上下两部分,上半部分就是标题栏,下面是窗口的具体内容.上下两部分通过布局固定位置.最后窗口的各种鼠标拖动,缩放,等操作通过添加鼠标事件来完成一个窗口的 ...
- Qt之自定义搜索框——QLineEdit里增加一个Layout,还不影响正常输入文字(好像是一种比较通吃的方法)
简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 方案一:调用QLineEdit现有接口 void ...
- MYSQL——解题查询语句答题思路,再难的查询都不怕!
select查询语句,作为测试人员,使用此语句是家常便饭,是必须掌握的部分,由开始学习mysql到网上搜索试题做,开始做题一塌糊涂,拿到题目就晕,无从下手,现在慢慢总结了一套自己做题的方式,很开森,嘿 ...
- QT in VS 多语言实现(中英文切换,每个步骤都有截图,只有UTF8才能让Qt语言家正确读取。先qApp->removeTranslator,然后installTranslator,每个类都要写上槽函数RetranslateUI)
最近项目需要软件具有中英文双语切换功能,而QT又自带此功能,现将实现方式记录下来. 说到中英文切换,少不了要了解QT的内部编码方式.在此就不详述QT编码方式了,具体可参考 彻底弄懂Qt的编码.只需要记 ...
- linux下使用localhost和127.0.0.1都不能连接的解决思路
linux下刚安装了mysql,尝试写了程序连接mysql,出现了只有用本地ip地址才能连接,而127.0.0.1和localhost都不能访问 解决这个问题主要查看3个方向 .hosts中是否有ip ...
- QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL
QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL 课程1 C语言程序设计高级实用速成课程 基础+进阶+自学 课程2 C语言程序设计Windows GDI图形绘 ...
随机推荐
- mysql在linux上重启
如何启动/停止/重启MySQL 一.启动方式 1.使用 service 启动:service mysqld start 2.使用 mysqld 脚本启动:/etc/inint.d/mysqld sta ...
- [TYVJ] P1065 津津的储蓄计划
津津的储蓄计划 背景 Background NOIP2004 提高组 第一道 描述 Description 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津300元钱,津津会预算这个月 ...
- 添加事件监听兼容IE6-8
IE8一下浏览器不支持addEventListener,用attachEvent取而代之,但是在时间类型前面要加上’on‘,例如click时间在attachEvent中要写成onclick. var ...
- final+基本类型导致只编译常量类引起的错误
http://jackyrong.iteye.com/blog/1813878 字节码问题.
- BZOJ 1101 Zap(莫比乌斯反演)
http://www.lydsy.com/JudgeOnline/problem.php?id=1101 给定a,b,d,求有多少gcd(x,y)==d(1<=x<=a&& ...
- zend server 和zend studio安装
zend server安装完后需要更改一个xml文件. 用记事本打开D:\Program Files\Zend\ZendServer\etc\ZendEnablerConf.xml文件. 将 锘??x ...
- 经验:Ubuntu 登陆 L2TP VPN
Ubuntu Linux 操作系统默认支持PPTP协议的VPN登陆,但是随着网络环境的复杂化,我们需要使用L2TP协议的VPN登陆,下面,我们只需要简单的几条命令即可登陆L2TP协议的VPN. ...
- JVM工作原理和特点(一些二逼的逼神面试官会问的问题)
作为一种阅读的方式了解下jvm的工作原理 ps:(一些二逼的逼神面试官会问的问题) JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完毕,通过以下4步来完毕JVM环境. ...
- Objective C - UIColor
UIColor+Hex.h #import <UIKit/UIKit.h> @interface UIColor (Hex) + (UIColor *) colorWithHexStrin ...
- lua实现多继承
http://my.oschina.net/u/156466/blog/401576local class1 = {} function class1:new() local obj = {} set ...