首先自定义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. KEIL简单实例

    好久都没有用KEIL了,突然想动手,一时还真不知道从哪开始写,所以先弄个小实例,以便参考:#include <reg52.h>  //加载包括一个52标准内核的头文件,里面主要是一些寄存器 ...

  2. Qt的Script、Quick、QML的关系与总结

    背景 最近在学QML,感觉也不难,就是一直以来接触 Qt 的脚本类的东西的顺序是Script.Quick1.Declarative.Quick2.QML.那么每一个都是干什么的呢,这些东西搞的我有点混 ...

  3. BaseAdapter自定义适配器——思路详解

    BaseAdapter自定义适配器——思路详解 引言: Adapter用来把数据绑定到扩展了AdapterView类的视图组.系统自带了几个原生的Adapter. 由于原生的Adapter视图功能太少 ...

  4. AndroidStudio常见提示

    Required:请求的是String字符串 .     Found:   et.getText()返回的是text.Editable

  5. MyBatis3整合Spring3、SpringMVC3

    开发环境: System:Windows WebBrowser:IE6+.Firefox3+ JavaEE Server:tomcat5.0.2.8.tomcat6 IDE:eclipse.MyEcl ...

  6. Android-67-Tomcat启动出错:Server Tomcat v7.0 Server at localhost failed to start.

     错误:Server Tomcat v7.0 Server at localhost failed to start.如图: 唉! ! !!图片上传不上去,悲哀啊!..仅仅能先写着错误提示语吧~~ ...

  7. Ubuntu下访问SSH

    ssh程序分为有客户端程序openssh-client和服务端程序openssh-server.如果需要ssh登陆到别的电脑,需要安装openssh-client,该程序ubuntu是默认安装的.而如 ...

  8. git的0基础使用

    1.申请一个git帐号 2.项目开发者将你增加这个项目 3.在终端随意一个目录克隆 该项目地址 git clone 该项目地址 4.进nginx配置 5.更新的时候进入项目目录 git pull

  9. Oracle decode函数 除数为零

    decode (expression, search_1, result_1)如果 expression结果=search_1结果,则返回result_1,类似 if elsedecode (expr ...

  10. Solr-4.10.2与Tomcat整合

    1.将下载的solr解压至D:\solr,拷贝d:\solr\solr-4.10.2\example\webapps\solr.war到Tomcat的webapps\目录中.直接解压 solr.war ...