不知是哪个版本的迅雷,有个“下载速度柱状图”的小界面,我比较喜欢(只不过最新版本的迅雷却没了),所以决定来山寨一个。当然,这个山寨品不能下载文件,呵呵。

思路:
1:将界面的背景涂成黑色
2:每隔0.1秒就产生一个随机数,将它们添加到一个容器中

3:重载paintEvent函数,,从界面的右边开始,依次将容器中的元素按倒序画出来(每个数据就是一个柱形)

截图:

代码:

    1. #include <QtGui>
    2. #include <QtCore>
    3. class BarChart : public QWidget
    4. {
    5. Q_OBJECT
    6. private:
    7. QList<int> m_List;        //储存历史上所记录的那些点
    8. QSize m_Size;           //当前绘图窗口的大小
    9. QTimer m_Timer;         //定时器,每0.1秒发出一次信号,模拟收到数据
    10. protected:
    11. void paintEvent(QPaintEvent *event);
    12. void resizeEvent(QResizeEvent *event);
    13. public:
    14. BarChart(QWidget *parent = 0);
    15. ~BarChart() { }
    16. public slots:
    17. void AddDataSlot();
    18. };
    19. BarChart::BarChart(QWidget *parent)
    20. : QWidget(parent)
    21. {
    22. //定义定时器
    23. qsrand( QDateTime::currentDateTime().toMSecsSinceEpoch() );
    24. connect(&m_Timer, SIGNAL(timeout()), this, SLOT(AddDataSlot()));
    25. m_Timer.start(100);
    26. }
    27. void BarChart::paintEvent(QPaintEvent *event)
    28. {
    29. const int WIDTH = 2;
    30. QPainter painter(this);
    31. //设置背景为黑色
    32. painter.setBrush(Qt::black);
    33. painter.drawRect(-2, -2, m_Size.width()+4, m_Size.height()+4);
    34. painter.setPen( QPen(Qt::green, WIDTH) );
    35. int tx, cx, cy1, cy2;
    36. tx = 0;
    37. cy1 = m_Size.height();
    38. //画出各段竖线
    39. QList<int>::iterator iter = m_List.end();
    40. while( iter != m_List.begin() )
    41. {
    42. cy2 = cy1 - (*(--iter)*m_Size.height()/1000);
    43. cx = m_Size.width() - tx;
    44. painter.drawLine(cx, cy1, cx, cy2);
    45. tx += WIDTH;
    46. }
    47. }
    48. void BarChart::resizeEvent(QResizeEvent *event)
    49. {
    50. m_Size = event->size();
    51. update();
    52. }
    53. void BarChart::AddDataSlot()
    54. {
    55. //添加一个0-999的数据
    56. int temp = qrand() % 1000;
    57. m_List.push_back(temp);
    58. //如果数据太长了,就丢掉前面的那一部分
    59. if( m_List.size() > m_Size.width() )
    60. m_List.pop_front();
    61. update();
    62. }
    63. #include "main.moc"
    64. int main(int argc, char **argv)
    65. {
    66. QApplication app(argc, argv);
    67. BarChart *bar = new BarChart;
    68. bar->show();
    69. return app.exec();
    70. }

http://blog.csdn.net/small_qch/article/details/7585758

QT:“下载速度柱状图”的模拟实现——思路真好,会动脑筋,连我都有了启发(这个思路好像是通用的)的更多相关文章

  1. Qt无边框窗体-模拟模态窗体抖动效果

    目录 一.概述 二.效果展示 三.功能实现 四.相关文章 原文链接:Qt无边框窗体-模拟模态窗体抖动效果 一.概述 用Qt开发windows客户端界面确实是一大利器,兼顾性能的同时,速度相对来说也不错 ...

  2. 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 ...

  3. QT下载速度慢的解决方法

    在官网的下载速度实在太慢了 找到了一个镜像网站 https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/

  4. QT自定义窗口(模拟MainWindow)

    在这里自定义窗口是通过继承于QFrame,内部分为上下两部分,上半部分就是标题栏,下面是窗口的具体内容.上下两部分通过布局固定位置.最后窗口的各种鼠标拖动,缩放,等操作通过添加鼠标事件来完成一个窗口的 ...

  5. Qt之自定义搜索框——QLineEdit里增加一个Layout,还不影响正常输入文字(好像是一种比较通吃的方法)

    简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 方案一:调用QLineEdit现有接口 void ...

  6. MYSQL——解题查询语句答题思路,再难的查询都不怕!

    select查询语句,作为测试人员,使用此语句是家常便饭,是必须掌握的部分,由开始学习mysql到网上搜索试题做,开始做题一塌糊涂,拿到题目就晕,无从下手,现在慢慢总结了一套自己做题的方式,很开森,嘿 ...

  7. QT in VS 多语言实现(中英文切换,每个步骤都有截图,只有UTF8才能让Qt语言家正确读取。先qApp->removeTranslator,然后installTranslator,每个类都要写上槽函数RetranslateUI)

    最近项目需要软件具有中英文双语切换功能,而QT又自带此功能,现将实现方式记录下来. 说到中英文切换,少不了要了解QT的内部编码方式.在此就不详述QT编码方式了,具体可参考 彻底弄懂Qt的编码.只需要记 ...

  8. linux下使用localhost和127.0.0.1都不能连接的解决思路

    linux下刚安装了mysql,尝试写了程序连接mysql,出现了只有用本地ip地址才能连接,而127.0.0.1和localhost都不能访问 解决这个问题主要查看3个方向 .hosts中是否有ip ...

  9. QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL

    QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL 课程1   C语言程序设计高级实用速成课程 基础+进阶+自学 课程2   C语言程序设计Windows GDI图形绘 ...

随机推荐

  1. CEF中文教程(google chrome浏览器控件) -- Windows下编译Chromium

    CEF中文教程(google chrome浏览器控件) -- CEF简介 2013-04-10 16:48 42928人阅读 评论(4) 收藏 举报  分类: CEF(2)    目录(?)[+]   ...

  2. C++ 11学习(1):lambda表达式

    转载请注明,来自:http://blog.csdn.net/skymanwu #include <iostream> #include <vector> #include &l ...

  3. MassMutual Interview Questions

    Company MassMutual Date 30/09/15 Location Boston, MA Position Application Developer It's not a codin ...

  4. PHP代码,拒绝频繁访问

    一个网站性能有限,如果有人恶意去频繁对页面进行刷新,其实对服务器影响是很大的,导致资源使用非常高,直接影响到其他用户的体验. 那么对于这样的一些频繁访问,我们该如何去拒绝它呢? 我总结了两种方法:第一 ...

  5. 【转】android电池(四):电池 电量计(MAX17040)驱动分析篇

    关键词:android 电池  电量计  MAX17040 任务初始化宏 power_supply 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台: ...

  6. 【转】V4L2+swscale+X264+live555实现流媒体服务端

    写这边博客,一方面是因为自己在做项目的时候不太做笔记,怕以后自己忘记了.另一方面,是让正在寻求资料的同行少走一点弯路吧.不能说我这个方案怎么的好,至少是有一点参考价值的.这边博客需要一定基础才能看明白 ...

  7. c#将输入的人民币数字金额转换成小写

    //// <summary> /// 人民币大小写金额转换 /// </summary> class RMBCapitalization { private const str ...

  8. MySQL Workbench导出数据库

    步骤: 1. 打开mysql workbench,进入需要导出的数据库,点击左侧栏的[Management]tab键. 2. 点选要输出的数据库 点击[Data Export] 选在要输出的数据库 选 ...

  9. cocos2d-x 3.0游戏实例学习笔记 《跑酷》 完结篇--源代码放送

    说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...

  10. Foundation--NSDictionary+NSMutableDictionary

    键值对 key(一般为字符串对象)---vaule(必须是对象) Person *p1 =[[Person alloc ]init]; Person *p2 =[[Person alloc ]init ...