Qt模块化笔记之Qt Widgets——抽象滑块及其继承类

继承关系如下:

三个可视类的默认外观分别如下(win7):它们的滑块都处于最小值0处。


————————————————————————————————————————————————————————————

理解QAbstractSlider时

可将它想成就是QScrollBar(该小部件的外观比较多地拥有QAbstractSlider属性):

属性列表如下:

不进行人为设置时的默认值如下:


公有函数主要是对以上属性的赋值或取值,列表如下:(以横向滚动条(图中右上角那个)说明)

QAbstractSlider(QWidget * parent = 0)
~QAbstractSlider()

//基本使用,需要设置以下几项
void	setMinimum(int)//滑块处于最左端时它代表的值
void	setMaximum(int)//滑块处于最右端时它代表的值
void	setSingleStep(int)//单击左或右小箭头时,滑块变化的长度
void	setPageStep(int)
void	setSliderPosition(int)//设置滑块初始化后处的位置
//特殊要求时,需要设置以下
void	setTracking(bool enable)//设置是否追踪,默认true,追踪时,只要滑块值在改变,它就不断发出信号(较多次),false时,只在松开滑块值改变时才发出(较少次)具体可试试例子的输出
void	setInvertedAppearance(bool)//设置成true后,最大最小值位置调换,且点击箭头时,滑块向相反方向走
void	setInvertedControls(bool)
void	setSliderDown(bool)
//以下取回值,绝大部分与以上对应
int	value() const
int	maximum() const
int	minimum() const
int	singleStep() const
int	pageStep() const
int	sliderPosition() const

bool	hasTracking() const
bool	invertedAppearance() const
bool	invertedControls() const
bool	isSliderDown() const

void	triggerAction(SliderAction action)
Qt::Orientation		orientation() const

公有槽函数如下:

void	setOrientation(Qt::Orientation)//代码创建的默认为竖直向的,需要横向的可设置这个,枚举值在下方
void	setRange(int min, int max)//设置值在变化范围,与setMinimun与setMaxmun两函数效果相同
void	setValue(int)

enum Qt::Orientation:

Constant	Value
Qt::Horizontal	0x1
Qt::Vertical	0x2

信号如下:

void	actionTriggered(int action)
void	rangeChanged(int min, int max)
void	sliderMoved(int value)
void	sliderPressed()
void	sliderReleased()
void	valueChanged(int value)//一般使用这个
————————————————————————————————————————————————————————————

QScrollBar大多函数都继承自上述类,

它的公有函数只有构造函数:

QScrollBar(QWidget * parent = 0)
QScrollBar(Qt::Orientation orientation, QWidget * parent = 0)
~QScrollBar()

示例如下:

#include "dialog.h"
#include "ui_dialog.h"
#include <QGridLayout>
#include <QScrollBar>
#include <QDebug>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    ScrollBar=new QScrollBar;
    ScrollBar->setMinimum(5);
    ScrollBar->setMaximum(20);
    ScrollBar->setSingleStep(2);
    ScrollBar->setPageStep(5);
    ScrollBar->setSliderPosition(10);
    ScrollBar->setOrientation(Qt::Horizontal);//将它改为水平的
    //ScrollBar->setInvertedAppearance(true);
    //ScrollBar->setInvertedControls(true);
    //ScrollBar->setTracking(false);

    QGridLayout *Layout = new QGridLayout;//布局类,用于将部件显示到建立的ui上
    Layout->addWidget(ScrollBar, 0, 0);
    setLayout(Layout);

    connect(ScrollBar,SIGNAL(valueChanged(int)),this,SLOT(SB_value_changed(int)));//连接信号,值一变就输出
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::SB_value_changed(int a)
{
    qDebug()<<a;
}
遗留问题:官网上说(The page step is the amount that the value changes by when the user presses the Page Up and Page Down keys,),但我使用这两个键时,部件却无动静,为什么?望大神解答
————————————————————————————————————————————————————————————

QSlider相比而言,

多出了tick(记号,翻译成刻度比较好),它在中心线的两端加了刻度用于标记值。

公有函数如下:

	QSlider(QWidget * parent = 0)
	QSlider(Qt::Orientation orientation, QWidget * parent = 0)
	~QSlider()
void	setTickInterval(int ti)//设置刻度间隔
void	setTickPosition(TickPosition position)//刻度位置,枚举值,见下方
int	tickInterval() const
TickPosition	tickPosition() const

刻度位置的枚举值enum QSlider::TickPosition

QSlider::NoTicks 0 无刻度,默认
QSlider::TicksBothSides 3 中线两端绘制
QSlider::TicksAbove 1 绘制线的上方
QSlider::TicksBelow 2 线下方
QSlider::TicksLeft TicksAbove 线左方
QSlider::TicksRight TicksBelow 线右方
设置刻度后图:


代码:

Slider=new QSlider;
    Slider->setOrientation(Qt::Horizontal);
    Slider->setTickPosition(QSlider::TicksAbove);
    Slider->setTickInterval(5);
其它常用函数及信号都来自抽象类,这里不赘述
————————————————————————————————————————————————————————————

QDial同Qslider类似,也多了个notch(刻痕)的概念

公有函数如下:

	QDial(QWidget * parent = 0)
~QDial()
int	notchSize() const
qreal	notchTarget() const
bool	notchesVisible() const
void	setNotchTarget(double target)//notch target指两刻度之间的像素距离,默认3.7px
bool	wrapping() const

公有槽:

void	setNotchesVisible(bool visible)//设置刻痕是否可见,默认不可见
void	setWrapping(bool on)
wrap有缠绕,盘绕的意思,可理解为首尾相接,设置成true(左)与不设置false效果分别如下:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值