首先自定义QSlider的子类MyCustomSlider,如下所示。

mycustomslider.h

  1. #ifndef MYCUSTOMSLIDER_H
  2. #define MYCUSTOMSLIDER_H
  3. #include <QSlider>
  4. #include <QLabel>
  5. #include <QMouseEvent>
  6. class MyCustomSlider : public QSlider
  7. {
  8. public:
  9. MyCustomSlider(QWidget *parent=0);
  10. ~MyCustomSlider();
  11. protected:
  12. virtual void mousePressEvent(QMouseEvent *event);
  13. virtual void mouseReleaseEvent(QMouseEvent *event);
  14. virtual void mouseMoveEvent(QMouseEvent *event);
  15. private:
  16. QLabel* m_displayLabel;
  17. };
  18. #endif // MYCUSTOMSLIDER_H

mycustomslider.cpp

  1. #include "mycustomslider.h"
  2. #include <QPalette>
  3. MyCustomSlider::MyCustomSlider(QWidget *parent):QSlider(parent)
  4. {
  5. m_displayLabel=new QLabel(this);
  6. m_displayLabel->setFixedSize(QSize(20,20));
  7. //设置游标背景为白色
  8. m_displayLabel->setAutoFillBackground(true);
  9. QPalette palette;
  10. palette.setColor(QPalette::Background, Qt::white);
  11. m_displayLabel->setPalette(palette);
  12. m_displayLabel->setAlignment(Qt::AlignCenter);
  13. m_displayLabel->setVisible(false);
  14. m_displayLabel->move(0,3);
  15. }
  16. MyCustomSlider::~MyCustomSlider()
  17. {
  18. }
  19. void MyCustomSlider::mousePressEvent(QMouseEvent *event)
  20. {
  21. if(!m_displayLabel->isVisible())
  22. {
  23. m_displayLabel->setVisible(true);
  24. m_displayLabel->setText(QString::number(this->value()));
  25. }
  26. QSlider::mousePressEvent(event);
  27. }
  28. void MyCustomSlider::mouseReleaseEvent(QMouseEvent *event)
  29. {
  30. if(m_displayLabel->isVisible())
  31. {
  32. m_displayLabel->setVisible(false);
  33. }
  34. QSlider::mouseReleaseEvent(event);
  35. }
  36. void MyCustomSlider::mouseMoveEvent(QMouseEvent *event)
  37. {
  38. m_displayLabel->setText(QString::number(this->value()));
  39. m_displayLabel->move((this->width()-m_displayLabel->width())*this->value()/(this->maximum()-this->minimum()),3);
  40. QSlider::mouseMoveEvent(event);
  41. }

然后将界面QSlider控件提升为MyCustomSlider,提升方法如下所示。

Qt中控件类的提升

最后的效果如下图所示,当鼠标点击滑块或者拖动滑块时,滑块正上方的游标实时显示当前值,松开鼠标时,游标隐藏。

源码链接:见http://blog.csdn.net/caoshangpa/article/details/51973902的评论

http://blog.csdn.net/caoshangpa/article/details/51973902

Qt自定义带游标的slider,在滑块正上方显示当前值(类似于进度条,用一个额外的QLabel冒充QSilder的一部分,然后move就行了)的更多相关文章

  1. Qt自定义带游标的slider,在滑块正上方显示当前值(非常有意思,继承QSlider之后增加一个QLabel,然后不断移动它)

    首先自定义QSlider的子类MyCustomSlider,如下所示. mycustomslider.h #ifndef MYCUSTOMSLIDER_H #define MYCUSTOMSLIDER ...

  2. SQL Server带游标的SQL

    DECLARE test_cursor CURSOR FOR SELECT ID FROM dbo.T_BD_Restaurant WHERE id <> '0AAB2E55-79F8-4 ...

  3. Qt 自定义事件(三种方法:继承QEvent,然后Send Post就都可以了,也可以覆盖customEvent函数,也可覆盖event()函数)

    Qt 自定义事件很简单,同其它类库的使用很相似,都是要继承一个类进行扩展.在 Qt 中,你需要继承的类是 QEvent. 继承QEvent类,你需要提供一个QEvent::Type类型的参数,作为自定 ...

  4. Qt使用com组件的一点小心得(使用Qt自带的工具dumpcpp生成.h和.cpp文件)

    这几天工作中要用到Qt调用com组件,主要用到的类型有dll和ocx,使用他们的方法很简单:1.将com组件注册到系统中.2.使用Qt自带的工具dumpcpp将com组件生成cpp和头文件.3.然后就 ...

  5. Qt 自定义事件

    Qt 自定义事件很简单,同其它类库的使用很相似,都是要继承一个类进行扩展.在 Qt 中,你需要继承的类是 QEvent. 继承QEvent类,你需要提供一个QEvent::Type类型的参数,作为自定 ...

  6. 自定义进度条PictureProgressBar——从开发到开源发布全过程

    自定义进度条PictureProgressBar——从开发到开源发布全过程 出处: 炎之铠邮箱:yanzhikai_yjk@qq.com 本文原创,转载请注明本出处! 本项目JCenter地址:htt ...

  7. Android Studio常见对话框(普通对话框、单选对话框、多选对话框、进度条对话框、消息对话框、自定义对话框)

    Android Studio常见对话框(普通对话框.单选对话框.多选对话框.进度条对话框.消息对话框.自定义对话框) 1.普通对话框 2.单选对话框 3.多选对话框 4.进度条对话框 5.消息对话框 ...

  8. Qt 怎样生成带图标的exe

    一.问题描述 当我们在 Windows 下用 VS 生成 exe 程序时,如果窗口程序指定了图标,那么生成的 exe 程序便是指定的图标模样. 但是,当使用 Qt Creator 编译程序却不同.即使 ...

  9. Qt自定义事件的实现(转)

    原文:http://blog.csdn.net/michealtx/article/details/6866094 初学Qt,用了Qt自带的事件,然后想怎么才能定义自己的事件呢?又如何使用自定义事件呢 ...

随机推荐

  1. java异常面试常见题目

    在Java核心知识的面试中,你总能碰到关于 处理Exception和Error的面试题.Exception处理是Java应用开发中一个非常重要的方面,也是编写强健而稳定的Java程序的关键,这自然使它 ...

  2. VC —— 笔记汇总

    导读 本文仅用于记录在个人在使用VC++过程中的遇到一些的问题和相关概念. 目录 开发环境 实践记录 MFC相关 windows编程相关 1.开发环境 1.Visual C++ 官方网站 主要内容:V ...

  3. Django 邮件推送 解决附件中文名字乱码

    Django邮件功能,详情可看官方文档(https://docs.djangoproject.com/en/1.10/topics/email/). 最近做这个功能时遇到的问题,发送附件,收到后中文名 ...

  4. android recovery 主系统代码分析

    阅读完上一篇文章: http://blog.csdn.net/andyhuabing/article/details/9226569 我们已经清楚了如何进入正常模式和Recovery模式已有深刻理解了 ...

  5. Lucene自定义扩展QueryParser

    Lucene版本:4.10.2 在使用lucene的时候,不可避免的需要扩展lucene的相关功能来实现业务的需要,比如搜索时,需要在满足一个特定范围内的document进行搜索,如年龄在20和30岁 ...

  6. &quot;蓝筹&quot;如何使程序猿?

    "蓝筹"这个词可能不是很多人知道这意味着什么.我会来普及知识.这是最重要的概念是指"越来越从长远来看更有价值"的含义.作为一个程序猿,我想你想使自己通过实际行动 ...

  7. Java基础知识强化76:正则表达式之替换功能

    1. 替换功能: String类的replaceAll方法,如下: public String replaceAll(String regex, String replacement): 使用给定的r ...

  8. SQLServer 工具技巧

    SQLServerProfiler 的使用 http://www.jikexueyuan.com/course/1712.html

  9. NYOJ-1070诡异的电梯【Ⅰ】

    这道题是个dp,主要考虑两种情况,刚开始我把状态转移方程写成了dp[i] = min(dp[i-1] + a, dp[i + 1] +b); 后来想想当推到dp[i]的时候,那个dp[i + 1]还没 ...

  10. 类名.this与类名.class

    1..当在内部类中使用this指的就是内部类的对象, 为了访问外层类对象,就可以使用外层类名.this来访问. 2.在java中,每个class都有一个相应的Class对象,当编写好一个类,编译完成后 ...