Qt自定义带游标的slider,在滑块正上方显示当前值(类似于进度条,用一个额外的QLabel冒充QSilder的一部分,然后move就行了)
首先自定义QSlider的子类MyCustomSlider,如下所示。
mycustomslider.h
- #ifndef MYCUSTOMSLIDER_H
- #define MYCUSTOMSLIDER_H
- #include <QSlider>
- #include <QLabel>
- #include <QMouseEvent>
- class MyCustomSlider : public QSlider
- {
- public:
- MyCustomSlider(QWidget *parent=0);
- ~MyCustomSlider();
- protected:
- virtual void mousePressEvent(QMouseEvent *event);
- virtual void mouseReleaseEvent(QMouseEvent *event);
- virtual void mouseMoveEvent(QMouseEvent *event);
- private:
- QLabel* m_displayLabel;
- };
- #endif // MYCUSTOMSLIDER_H
mycustomslider.cpp
- #include "mycustomslider.h"
- #include <QPalette>
- MyCustomSlider::MyCustomSlider(QWidget *parent):QSlider(parent)
- {
- m_displayLabel=new QLabel(this);
- m_displayLabel->setFixedSize(QSize(20,20));
- //设置游标背景为白色
- m_displayLabel->setAutoFillBackground(true);
- QPalette palette;
- palette.setColor(QPalette::Background, Qt::white);
- m_displayLabel->setPalette(palette);
- m_displayLabel->setAlignment(Qt::AlignCenter);
- m_displayLabel->setVisible(false);
- m_displayLabel->move(0,3);
- }
- MyCustomSlider::~MyCustomSlider()
- {
- }
- void MyCustomSlider::mousePressEvent(QMouseEvent *event)
- {
- if(!m_displayLabel->isVisible())
- {
- m_displayLabel->setVisible(true);
- m_displayLabel->setText(QString::number(this->value()));
- }
- QSlider::mousePressEvent(event);
- }
- void MyCustomSlider::mouseReleaseEvent(QMouseEvent *event)
- {
- if(m_displayLabel->isVisible())
- {
- m_displayLabel->setVisible(false);
- }
- QSlider::mouseReleaseEvent(event);
- }
- void MyCustomSlider::mouseMoveEvent(QMouseEvent *event)
- {
- m_displayLabel->setText(QString::number(this->value()));
- m_displayLabel->move((this->width()-m_displayLabel->width())*this->value()/(this->maximum()-this->minimum()),3);
- QSlider::mouseMoveEvent(event);
- }
然后将界面QSlider控件提升为MyCustomSlider,提升方法如下所示。
最后的效果如下图所示,当鼠标点击滑块或者拖动滑块时,滑块正上方的游标实时显示当前值,松开鼠标时,游标隐藏。
源码链接:见http://blog.csdn.net/caoshangpa/article/details/51973902的评论
http://blog.csdn.net/caoshangpa/article/details/51973902
Qt自定义带游标的slider,在滑块正上方显示当前值(类似于进度条,用一个额外的QLabel冒充QSilder的一部分,然后move就行了)的更多相关文章
- Qt自定义带游标的slider,在滑块正上方显示当前值(非常有意思,继承QSlider之后增加一个QLabel,然后不断移动它)
首先自定义QSlider的子类MyCustomSlider,如下所示. mycustomslider.h #ifndef MYCUSTOMSLIDER_H #define MYCUSTOMSLIDER ...
- SQL Server带游标的SQL
DECLARE test_cursor CURSOR FOR SELECT ID FROM dbo.T_BD_Restaurant WHERE id <> '0AAB2E55-79F8-4 ...
- Qt 自定义事件(三种方法:继承QEvent,然后Send Post就都可以了,也可以覆盖customEvent函数,也可覆盖event()函数)
Qt 自定义事件很简单,同其它类库的使用很相似,都是要继承一个类进行扩展.在 Qt 中,你需要继承的类是 QEvent. 继承QEvent类,你需要提供一个QEvent::Type类型的参数,作为自定 ...
- Qt使用com组件的一点小心得(使用Qt自带的工具dumpcpp生成.h和.cpp文件)
这几天工作中要用到Qt调用com组件,主要用到的类型有dll和ocx,使用他们的方法很简单:1.将com组件注册到系统中.2.使用Qt自带的工具dumpcpp将com组件生成cpp和头文件.3.然后就 ...
- Qt 自定义事件
Qt 自定义事件很简单,同其它类库的使用很相似,都是要继承一个类进行扩展.在 Qt 中,你需要继承的类是 QEvent. 继承QEvent类,你需要提供一个QEvent::Type类型的参数,作为自定 ...
- 自定义进度条PictureProgressBar——从开发到开源发布全过程
自定义进度条PictureProgressBar——从开发到开源发布全过程 出处: 炎之铠邮箱:yanzhikai_yjk@qq.com 本文原创,转载请注明本出处! 本项目JCenter地址:htt ...
- Android Studio常见对话框(普通对话框、单选对话框、多选对话框、进度条对话框、消息对话框、自定义对话框)
Android Studio常见对话框(普通对话框.单选对话框.多选对话框.进度条对话框.消息对话框.自定义对话框) 1.普通对话框 2.单选对话框 3.多选对话框 4.进度条对话框 5.消息对话框 ...
- Qt 怎样生成带图标的exe
一.问题描述 当我们在 Windows 下用 VS 生成 exe 程序时,如果窗口程序指定了图标,那么生成的 exe 程序便是指定的图标模样. 但是,当使用 Qt Creator 编译程序却不同.即使 ...
- Qt自定义事件的实现(转)
原文:http://blog.csdn.net/michealtx/article/details/6866094 初学Qt,用了Qt自带的事件,然后想怎么才能定义自己的事件呢?又如何使用自定义事件呢 ...
随机推荐
- MVC4 Razor视图下使用iframe加载RDLC报表
MVC视图下默认是不支持服务器端控件的,所以,为了能够通过report viewer控件加载报表,需要在MVC视图添加嵌入的页面. 起初在stackoverflow上找到一个解决方案,见这里.不过这里 ...
- WORLD PROBLEMS
World中遇到到一些问题 1. 由于文件许可权错误,word无法完成保存操作 我的选择另存为有效,没有安装卡巴斯基8.0(Kaspersky Internet Security 8.0.0. ...
- 拖数据库到x-code常见错误
拖进去之后,用本地读取的方式读不到路径,重新拖一次,并且把Add to targets 里面的勾勾上
- C# 读取 Access 数据库表的例子
using System;using System.Data;using System.Data.OleDb;using System.Collections.Generic;using System ...
- 程序中使用7-zip(7z)压缩文件
Email:longsu2010 at yeah dot net 工作中难免遇到需要压缩文件的情况,比如有一千万个小文件,每个文件约100k,如果使用7-zip压缩后可能十几k,可以节省很多磁盘空间. ...
- mysql去掉字段字符中间空格
mysql有什么办法批量去掉某个字段字符中的空格?不仅是字符串前后的空格,还包含字符串中间的空格,答案是 replace,使用mysql自带的 replace 函数,另外还有个 trim 函数. ...
- Disposable microfluidic devices: fabrication, function, and application Gina S. Fiorini and Daniel T
Disposable microfluidic devices: fabrication, function, and application Gina S. Fiorini and Daniel T ...
- Zend Studio 10正式版破解(2013-02-26更新)
Zend Studio 10正式版注册破解(2013-02-26完成更新) 1.以下方法仅供技术交流学习,请勿非法使用,如长期使用请支持购买正版. 2.若你还没有最新安装程序? ZendStudio ...
- C++中将string类型转换为int, float, double类型 主要通过以下几种方式:
C++中将string类型转换为int, float, double类型 主要通过以下几种方式: # 方法一: 使用stringstream stringstream在int或float类型转换为 ...
- JuiceSSh破解分析
JuiceSSH是一款免费的远程ssh客户端,感觉是一款挺优秀的软件,里边有一些高级功能需要购买高级版才能使用,这里便对其对高级功能的破解进行分析. 本文仅用于学习交流使用,请尊重作者,勿在网上肆意发 ...