1. 程式人生 > >Qt模組化筆記之Qt Widgets——抽象滑塊及其繼承類

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效果分別如下: