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

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

mycustomslider.h

[cpp] view plain copy

  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

[cpp] view plain copy

  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

时间: 2024-07-28 18:32:30

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

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

首先自定义QSlider的子类MyCustomSlider,如下所示. mycustomslider.h [cpp] view plain copy #ifndef MYCUSTOMSLIDER_H #define MYCUSTOMSLIDER_H #include <QSlider> #include <QLabel> #include <QMouseEvent> class MyCustomSlider : public QSlider { public: MyCu

SQL Server带游标的SQL

DECLARE test_cursor CURSOR FOR SELECT ID FROM dbo.T_BD_Restaurant WHERE id <> '0AAB2E55-79F8-4F41-AFFA-00179DFABDB0' OPEN test_cursor DECLARE @RestaurantID NVARCHAR(100) FETCH NEXT FROM test_cursor INTO @RestaurantID WHILE @@FETCH_STATUS = 0 BEGIN P

酷炫进度条 自定义SeekBar

前些天一同学给了我一个ui图,是这样子的: 需求: 1.看了ui图可以知道这类似android自带的seekbar控件, 2.一个水平进度条和一个圆形进度条: 3.圆形进度条显示环形刻度和当前进度值: 4.并且圆形进度可滑动操作: 最终实现效果: 废话不多说上代码: 水平的进度条:HorizonalProgress.class package com.totcy.magicprogress; import android.animation.ObjectAnimator; import andr

MFC控件编程:旋转按钮、进度条和滑块控件

旋转按钮(微调按钮) : 对应的控件类是CSpinButtonCtrl 进度条:对应的控件类是CProgressCtrl 滑块:对应的控件类是CSliderCtrl 对这三个控件的操作都是同过与之相关联的控件类完成的,并且这三个控件有极大的相似性,故这里放到一起 先认识下: Spin:            Progress:             Slider: 常用函数: SetRange()/GetRange(); // 设置.获取控件表示的范围 /* 设置控件的增量(步长) */ CS

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

自定义进度条PictureProgressBar--从开发到开源发布全过程 出处: 炎之铠邮箱:[email protected] 本文原创,转载请注明本出处! 本项目JCenter地址:https://bintray.com/yanzhikaijky/CustomViewRepository/PictureProgressbar/ 本项目GitHub地址:https://github.com/totond/PictureProgressBar 欢迎 Star or Fork和在Issue里提出

自定义圆形进度条 自定义倒计时进度条

自定义圆形进度条 自定义倒计时进度条 版权声明:转载必须注明本文转自严振杰的博客: http://blog.csdn.net/yanzhenjie1003 此控件源码已开源到Github:https://github.com/yanzhenjie/CircleTextProgressbar,欢迎Star. 欢迎加入我博客左侧的QQ交流群一起探讨. 效果预览 源代码传送门:https://github.com/yanzhenjie/CircleTextProgressbar 实现与原理 这个文字圆

QT自定义精美换肤界面

陆陆续续用QT开发过很多项目,也用QT写过不少私活项目,也写过N个工具,一直梦寐以求能像VC一样可以很方便的有个自定义的界面,QSS的强大让我看到了很好的希望,辗转百度谷歌无数次,一直搜索QT相关的换肤文章,绝大部分的是一些简单的按钮文本样式,要做到整体换肤程度几乎不行,QTCN论坛里的奋斗的孩子写了个模仿360安全卫士系列,让我既惊喜有遗憾,惊喜的是能够用QT实现一个这么完整的360安全卫士界面,确实不错,也支持多种换肤,遗憾的是我下载过的是VC版本的,对于一直执着于用Qt Creator 来

Android 自定义带刻度的seekbar

自定义带刻度的seekbar 1.布局 <span style="font-family:SimHei;font-size:18px;"><com.imibaby.client.views.CustomSeekbar android:id="@+id/myCustomSeekBar" android:layout_width="wrap_content" android:layout_height="wrap_cont

Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar)

/** * 带文本提示的进度条 */ public class TextProgressBar extends ProgressBar { private String text; private Paint mPaint; public TextProgressBar(Context context) { super(context); initText(); } public TextProgressBar(Context context, AttributeSet attrs, int d