Qt基础学习---滑动条之QSlider
Qt滑动条基本用法:
//mydialog.h
#ifndef MYDIALOG_H
#define MYDIALOG_H
#include <QDialog>
class QLineEdit;
class QSlider;
class MyDialog : public QDialog
{
Q_OBJECT
public:
explicit MyDialog(QWidget *parent = 0);
signals:
public slots:
void setLineEditValue(int value);
private:
QLineEdit *lineEdit;
QSlider *slider;
};
#endif // MYDIALOG_H
//mydialog.cpp
#include "mydialog.h"
#include <QtGui/QLineEdit>
#include <QtGui/QSlider>
#include <QtGui/QHBoxLayout>
MyDialog::MyDialog(QWidget *parent) :
QDialog(parent)
{
lineEdit = new QLineEdit("50");
//新建一个水平方向的滑动条QSlider控件
slider = new QSlider(Qt::Horizontal);
//设置滑动条控件的最小值
slider->setMinimum(0);
//设置滑动条控件的最大值
slider->setMaximum(100);
//设置滑动条控件的值
slider->setValue(50);
//信号和槽 当滑动条的值发生改变时,即产生一个valueChanged(int)信号 设置QLineEdit控件的显示文本
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(setLineEditValue(int)));
QHBoxLayout *layout = new QHBoxLayout();
layout->addWidget(lineEdit);
layout->addWidget(slider);
this->setLayout(layout);
this->resize(200, 50);
this->setWindowTitle("QSliderDemo");
}
void MyDialog::setLineEditValue(int value)
{
int pos = slider->value();
QString str = QString("%1").arg(pos);
lineEdit->setText(str);
}
//main.cpp
#include <QtGui/QApplication>
#include "mydialog.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyDialog dialog;
dialog.show();
return a.exec();
}
程序运行结果:
具体介绍:
QSlider很少有自己的函数,大部分功能在QAbstractSlider中。
最有用的函数是setValue(),用来设置滑块的当前值;
triggerAction()来模拟点击的效果(对快捷键有用);
setSingleStep()、setPageStep()用来设置步长;
setMinimum()和setMaximum()用于定义滚动条的范围。
QSlider提供了一些方法来控制刻度标记:
可以使用setTickPosition()来表示刻度标记的位置,
使用setTickInterval()来指定刻度的间隔;
当前设置的刻度位置和间隔可以分别使用tickPosition()和tickInterval()函数来查询。
QSlider继承了一组全面的信号:
valueChanged()----- 当滑块的值发生了改变,发射此信号。
tracking()-----确定在用户交互时,是否发出此信号。
sliderPressed()----- 当用户按下滑块,发射此信号。
sliderMoved()-----当用户拖动滑块,发射此信号。
sliderReleased()----- 当用户释放滑块,发射此信号。
QSlider只提供整数范围。
注意:尽管QSlider可以处理非常大的数字,但是对于用户来说,难以准确使用很大范围的滑块。
滑块接受Tab键的焦点,并同时提供了一个鼠标滚轮和键盘接口。键盘接口如下:
Left/Right 移动水平滑块一个步长。
Up/Down 移动垂直滑块一个步长。
PageUp 上移一页。
PageDown 下移一页。
Home 移动至起始位置(最小值)。
End 移动至结束位置(最大值)
代码:
int nMin = 0;
int nMax = 200;
int nSingleStep = 10;
// 微调框
QSpinBox *pSpinBox = new QSpinBox(this);
pSpinBox->setMinimum(nMin); // 最小值
pSpinBox->setMaximum(nMax); // 最大值
pSpinBox->setSingleStep(nSingleStep); // 步长
// 滑动条
QSlider *pSlider = new QSlider(this);
pSlider->setOrientation(Qt::Horizontal); // 水平方向
pSlider->setMinimum(nMin); // 最小值
pSlider->setMaximum(nMax); // 最大值
pSlider->setSingleStep(nSingleStep); // 步长
// 连接信号槽(相互改变)
connect(pSpinBox, SIGNAL(valueChanged(int)), pSlider, SLOT(setValue(int)));
connect(pSlider, SIGNAL(valueChanged(int)), pSpinBox, SLOT(setValue(int)));
pSpinBox->setValue(10);12345678910111213141516171819202122
通过setMinimum()与setMaximum()函数,我们将取固定到一个合适的范围(0 - 200),连接信号槽后,当QSpinBox的值发生改变时,QSlider的值也会发生相应变化;反之亦然。最后,我们使用setValue()将QSpinBox的值设置为10,由于信号槽已经连接,所以这时QSlider的值也会发生改变。
QSlider的点击与拖动
lass SliderClick : public QSlider
{
public:
SliderClick(QWidget *parent = 0) : QSlider(parent)
{
}
protected:
void mousePressEvent(QMouseEvent *ev)
{
//注意应先调用父类的鼠标点击处理事件,这样可以不影响拖动的情况
QSlider::mousePressEvent(ev);
//获取鼠标的位置,这里并不能直接从ev中取值(因为如果是拖动的话,鼠标开始点击的位置没有意义了)
double pos = ev->pos().x() / (double)width();
setValue(pos * (maximum() - minimum()) + minimum());
//向父窗口发送自定义事件event type,这样就可以在父窗口中捕获这个事件进行处理
QEvent evEvent(static_cast<QEvent::Type>(QEvent::User + 1));
QCoreApplication::sendEvent(parentWidget(), &evEvent);
}
};
QSlider点击不到该位置
方法一:可以继承重写一个QSlider
方法二:1.instaneventfiliter(this);slider安装一个事件过滤器
2.在eventfilter(QObject,QEvent)中拦截它,很简单吧
slider=new QSlider(this);
slider->installEventFilter(this);
bool trayIconMenu::eventFilter(QObject *obj, QEvent *event)
{
if(obj==slider)
{
if (event->type()==QEvent::MouseButtonPress) //判断类型
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
if (mouseEvent->button() == Qt::LeftButton) //判断左键
{
int dur = slider->maximum() - slider->minimum();
int pos = slider->minimum() + dur * ((double)mouseEvent->x() / slider->width());
if(pos != slider->sliderPosition())
{
slider->setValue(pos);
}
}
}
}
return QObject::eventFilter(obj,event);
}
okay!即可以实现slider点哪里就到哪里
Qt基础学习---滑动条之QSlider的更多相关文章
- Qt基础学习(3)-----滑动条之QSlider
//mydialog.h #ifndef MYDIALOG_H #define MYDIALOG_H #include <QDialog> class QLineEdit; class Q ...
- 使用OpenCV滑动条写成的简单调色器,实时输出RGB值
好久没有写博客了,近期在看OpenCV.于是动手写了个简单的RGB调色器,在终端实时输出RGB的值.通过这个程序学习滑动条的使用.程序中主要用到cvCreateTrackbar ,其使用方法例如以下: ...
- PyQt(Python+Qt)学习随笔:QSlider滑动条部件功能简介
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 Designer输入部件中的Horizo ...
- 第15.44节、PyQt输入部件:QAbstractSlider派生类QScrollBar滚动条、QSlider滑动条、QDial刻度盘功能详解
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.引言 Designer中的输入部件Horizo ...
- 滑动条QSlider
QSlider只提供整数范围 滑块接受Tab键的焦点,并同时提供了一个鼠标滚轮和键盘接口.键盘接口如下: Left/Right 移动水平滑块一个步长.Up/Down 移动垂直滑块一个步长.PageUp ...
- 第三十七章、PyQt输入部件:QAbstractSlider派生类QScrollBar滚动条、QSlider滑动条、QDial刻度盘功能介绍
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.引言 Designer中的输入部件Horizo ...
- Qt滑动条设计与实现
没有找到Qt的滑动条控件,所以自己写了一个,能够实现亮度调节.音量调节等功能. 效果如下图: 主要设计思路: 有些调节功能如对比度是有负值的,所以需要能对滑动条的数值范围进行设置,不局限于0~100 ...
- opencv-python教程学习系列6-用滑动条做调色板
前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍opencv-python用滑动条做调色板,坚持学习,共同进步. 系列教程参照OpenCV-Pyt ...
- bootstrap基础学习【导航条、分页导航】(五)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
随机推荐
- 关于IOC和DI
IoC (Inverse of Control)即控制反转.是指将原来程序中自己创建实现类对象的控制权反转到IOC容器中.只需要通过IOC获了对象的实例,将IOC当成一个黑盒子.工厂.容器. spri ...
- JS常用各种正则表达式(汇总)
匹配URL 这个url的正则表达式判断的JavaScript!比较全面的.它验证的情况包括IP,域名(domain),ftp,二级域名,域名中的文件,域名加上端口!用户名等等信息, function ...
- QSS独门秘籍:subcontrol
QSS是C++ Qt中的界面美化神器,其语法和CSS区别不大,但是QSS有一个独有的功能——subcontrol,这是CSS所没有的,一个widget往往由多个子部件构成,利用subcontrol可以 ...
- linux之tail和head的使用
tail 基本介绍 用于显示文件的结尾的内容.在默认情况下,taild命令显示文件的后10行内容 表达式 tail [options] [filenames] 常用参数 -c:输出最后N个字节 -f: ...
- linux下查看网卡速率
转自:http://blog.csdn.net/liugongfeng/article/details/50263733 我们都知道ifconfig -a 可以列出所有网卡,但是怎么判读是千兆网卡还是 ...
- Spring Boot事务管理(下)
在上两篇 Spring Boot事务管理(上)和Spring Boot事务管理(中)的基础上介绍注解@Transactional. 5 @Transactional属性 属性 类型 描述 value ...
- Linux3.10.0块IO子系统流程(0)-- 块IO子系统概述
前言:这个系列主要是记录自己学习Linux块IO子系统的过程,其中代码分析皆基于Linux3.10.0版本,如有描述错误或不妥之处,敬请指出! 参考书籍:存储技术原理分析--基于Linux 2.6内核 ...
- caffe中的卷积
https://www.zhihu.com/question/28385679 如上,将三维的操作转换到二维上面去做,然后调用GEMM库进行矩阵间的运算得到最后结果. 两个矩阵相乘,需要中间的那个维度 ...
- mongodb 3.2 分片 + 副本集
从图中可以看到有四个组件:mongos.config server.shard.replica set. mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加 ...
- 归并排序(Python实现)
目录 1. 归并排序--while版本 2. 测试用例 3. 算法时间复杂度分析 1. 归并排序--while版本 def merge_sort_while(b_list): '''归并排序--whi ...