首先自定义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://download.csdn.net/detail/caoshangpa/9581687

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

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

    首先自定义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. 自定义带图片和文字的ImageTextButton

    今天我们来讲一下有关自定义控件的问题,今天讲的这篇是从布局自定义开始的,难度不大,一看就明白,估计有的同学或者开发者看了说,这种方式多此一举,但是小编我不这么认为,多一种解决方式,就多一种举一反三的学 ...

  4. Qt自定义标签按钮

    当你接触到Qt时,你会为它极为方便的跨平台方面感到吃惊,从而想尝试着使用Qt.渐渐地你会发现Qt自带的一些控件不能满足自己的需要,此时就需要我们自己定义一个属于自己的控件.总所周知,标签的风格设置类比 ...

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

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

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

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

  7. Qt自定义事件的实现(军队真正干活,但要增加监军,大平台通知事件,事件内容自定义)

    初学Qt,用了Qt自带的事件,然后想怎么才能定义自己的事件呢?又如何使用自定义事件呢?看了篇文章,说先要子类化QEvent,然后定义自己的QEvent::Type,然后重写QWidget::event ...

  8. Qt 自定义事件的实现

    初学Qt,用了Qt自带的事件,然后想怎么才能定义自己的事件呢?又如何使用自定义事件呢?看了篇文章,说先要子类化QEvent,然后定义自己的QEvent::Type,然后重写QWidget::event ...

  9. Qt自定义标题栏

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt自定义标题栏     本文地址:http://techieliang.com/2017/1 ...

随机推荐

  1. linux下,FTP服务相关

    虚拟机上安装完CentOS 6.5后,使用FTP工具(FlashFXP)来上传文件到虚拟机的linux,结果发现连接不上.现在解决了,解决方法总结一下: 1.先检查有没有安装ftp.好像包括两个部分, ...

  2. cocos2dx lua 加密

    cocos2dx-lua项目发布时,为了保护lua源码,需要对lua进行加密.通常分为两种方式:加密文件和编译为字节码. 1.加密文件 前提是你不用luajit,而使用lua.这样这种方法是真正加密, ...

  3. redis 学习笔记二 (简单动态字符串)

    redis的基本数据结构是动态数组 一.c语言动态数组 先看下一般的动态数组结构 struct MyData { int nLen; char data[0]; }; 这是个广泛使用的常见技巧,常用来 ...

  4. android面试题之六

    三十一.AIDL的全称是什么?如何工作?能处理哪些类型的数据? 英文全称:Android Interface Define Language(Android接口定义语言). 当A进程要去调用B进程中的 ...

  5. Xcode7中你一定要知道的炸裂调试神技(转)

    1.Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS? EXC_BAD_ACCESS一直是很多开发者的噩梦,因为这个错误很不直观,出现后往往要花很长时间才能定位到错 ...

  6. phpcms:四、尾部包含

    四.尾部包含1.包含尾部文件:{template "content","footer"}2.栏目列表调用(关于我们| 联系方式| 版权声明| 招聘信息|):{p ...

  7. java_重写与重载的区别

    重写与重载的区别 重载(Overloading)和重写(Overriding)是Java中两个比较重要的概念.但是对于新手来说也比较容易混淆.本文通过两个简单的例子说明了他们之间的区别. 定义 重载 ...

  8. vbox下centos安装增加功能失败

    一般都是:unable to find the sources of your current Linux kernel. 先尝试这个吧:yum install kernel kernel-heade ...

  9. [转]Jquery中AJAX错误信息调试参考

    下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求 ...

  10. C++11多线程教学II

    从我最近发布的C++11线程教学文章里,我们已经知道C++11线程写法与POSIX的pthreads写法相比,更为简洁.只需很少几个简单概念,我们就能搭建相当复杂的处理图片程序,但是我们回避了线程同步 ...