Qt模組化筆記之Qt Widgets——抽象滑塊及其繼承類
阿新 • • 發佈:2019-01-28
繼承關係如下:
三個可視類的預設外觀分別如下(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()
示例如下:
遺留問題:官網上說(The page step is the amount that the value changes by when the user presses the Page Up and Page Down keys,),但我使用這兩個鍵時,部件卻無動靜,為什麼?望大神解答#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; }
————————————————————————————————————————————————————————————
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效果分別如下: