首先自定义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. 如何给开源的DUILib支持Accessibility(论述了DUILib的六个缺点,很精彩)

    最近的工作是给开源的DUILib支持Accessibility, 一些经验记录并分享下.   微软的Accessibility其实Windows平台上一个挺重要的东西, 尽管在国内不受重视,但是如果你 ...

  2. 黑马程序员_Java_多线程

    8.多线程 8.1.多线程概述 进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 线程(例:FlashGet):就是进程中一个独立的控制单元.线 ...

  3. UBI(unsorted block image )块管理

    一.介绍 ubi是unsorted block images的缩写,是由IBM开发设计的,它与ubifs有不同的含义,ubifs是一种文件系统(nokia开发的):而ubi是一种块管理工具,工作在mt ...

  4. chapter 2: Representing and manipulating information

    C allows conversion between unsigned and signed. The rule is that the underlying bit representation ...

  5. PHP常用魔术方法(__set、__get魔术方法:)

    __set.__get魔术方法: //文件名:Object.php <?phpnamespace IMooc;class Object{ protected $array = array(); ...

  6. JAVA泛型编程笔记

    1介绍 Java泛型编程是JDK1.5版本后引入的.泛型让编程人员能够使用类型抽象,通常用于集合里面. 下面是一个不用泛型例子: List myIntList=new LinkedList(); // ...

  7. 支持多QQ登录的软件

    支持多QQ登录,批量加好友,批量回复QQ消息,当然也能接收 下载链接:多QQ登录软件

  8. 【转】Xcode升到6.4插件失效,与添加插件不小心点击Skip Bundle解决办法

    转载自:http://www.jianshu.com/p/d51547d29309 今天升级了xcode到6.4 发现之前装的插件不能使用了.这里有一个解决的方案: 步骤如下: 一.查看Xcode的U ...

  9. 文本框按键事件onkeydown、onkeypress、onkeyup区别

    当我们在搜索时,会用到这几个事件 onkeydown 是指鼠标按下的那一刻,此时用户不知道按了什么,文本框也不会显示,首先触发的事件 onkeypress 是指鼠标按下然后松开的瞬间,此时仍然获取不到 ...

  10. Key lock 的秘密

    研究死锁,或者观察sp_lock,有时候最恼人的莫过于你看到下面研究成果的key lock,但是却不知道究竟是哪个page 哪个row被lock住了: Exec sp_lock:   就说上面的key ...