翻譯|使用教程|編輯:龔雪|2024-07-11 14:55:20.870|閱讀 115 次
概述:本文將為大家介紹如何使用Qt Widget小部件如何實(shí)現(xiàn)一個(gè)滑動(dòng)條示例,歡迎下載最新版組件體驗(yàn)~
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
Qt 是目前最先進(jìn)、最完整的跨平臺(tái)C++開發(fā)工具。它不僅完全實(shí)現(xiàn)了一次編寫,所有平臺(tái)無(wú)差別運(yùn)行,更提供了幾乎所有開發(fā)過(guò)程中需要用到的工具。如今,Qt已被運(yùn)用于超過(guò)70個(gè)行業(yè)、數(shù)千家企業(yè),支持?jǐn)?shù)百萬(wàn)設(shè)備及應(yīng)用。
滑動(dòng)條示例展示了如何使用Qt中可用的不同類型的滑動(dòng)條:, 和 。
Qt提供了三種類似滑動(dòng)條的小部件:QSlider、QScrollBar和QDial,它們都繼承了QAbstractSlider的大部分功能,并且理論上可以在應(yīng)用程序中相互替換,因?yàn)椴町愔簧婕八鼈兊耐庥^和樣式。這個(gè)例子展示了它們是什么樣子的,它們是如何工作的,以及如何通過(guò)它們的屬性來(lái)操縱它們的操作和外觀。
Qt技術(shù)交流群:166830288 歡迎一起進(jìn)群討論
本示例還演示了如何使用信號(hào)和槽來(lái)同步兩個(gè)或多個(gè)小部件的操作,以及如何覆蓋resizeEvent()來(lái)實(shí)現(xiàn)響應(yīng)式布局。
在上文中(點(diǎn)擊這里回顧>>),我們主要為大家介紹了Window類定義、Window類實(shí)現(xiàn)等,本文將繼續(xù)介紹SlidersGroup類的定義和實(shí)現(xiàn)。
class SlidersGroup : public QGroupBox { Q_OBJECT public: SlidersGroup(const QString &title, QWidget *parent = nullptr); signals: void valueChanged(int value); public slots: void setValue(int value); void setMinimum(int value); void setMaximum(int value); void invertAppearance(bool invert); void invertKeyBindings(bool invert); void setOrientation(Qt::Orientation orientation); private: QSlider *slider; QScrollBar *scrollBar; QDial *dial; QBoxLayout *slidersLayout; };
SlidersGroup類繼承自,它提供了一個(gè)框架和一個(gè)標(biāo)題,并包含一個(gè)、一個(gè) 和一個(gè)。
我們提供了一個(gè)valueChanged()信號(hào)和一個(gè)公共setValue()槽,其功能與QAbstractSlider和QSpinBox中的相同。此外,我們還實(shí)現(xiàn)了其他幾個(gè)公共槽來(lái)設(shè)置最小值和最大值,并反轉(zhuǎn)滑塊小部件的外觀以及鍵綁定,并設(shè)置方向。
SlidersGroup::SlidersGroup(const QString &title, QWidget *parent) : QGroupBox(title, parent) { slider = new QSlider; slider->setFocusPolicy(Qt::StrongFocus); slider->setTickPosition(QSlider::TicksBothSides); slider->setTickInterval(10); slider->setSingleStep(1); scrollBar = new QScrollBar; scrollBar->setFocusPolicy(Qt::StrongFocus); dial = new QDial; dial->setFocusPolicy(Qt::StrongFocus);
首先我們創(chuàng)建具有適當(dāng)屬性的類似滑塊的小部件,我們?yōu)槊總€(gè)小部件設(shè)置焦點(diǎn)策略。是一個(gè)枚舉類型,它定義了小部件在獲取鍵盤焦點(diǎn)方面可以具有的各種策略,策略意味著小部件通過(guò)tab和click來(lái)接受焦點(diǎn)。
connect(slider, &QSlider::valueChanged, scrollBar, &QScrollBar::setValue); connect(scrollBar, &QScrollBar::valueChanged, dial, &QDial::setValue); connect(dial, &QDial::valueChanged, slider, &QSlider::setValue); connect(dial, &QDial::valueChanged, this, &SlidersGroup::valueChanged);
然后我們將這些小部件彼此連接起來(lái),這樣當(dāng)其中一個(gè)小部件的當(dāng)前值發(fā)生變化時(shí),它們將保持同步。
將dial的valueChanged()信號(hào)連接到SlidersGroup的valueChanged()信號(hào),來(lái)將更改的值通知應(yīng)用程序中的其他小部件(即控件小部件)。
slidersLayout = new QBoxLayout(QBoxLayout::LeftToRight); slidersLayout->addWidget(slider); slidersLayout->addWidget(scrollBar); slidersLayout->addWidget(dial); setLayout(slidersLayout); }
最后為組框內(nèi)的滑塊小部件創(chuàng)建布局,從滑塊的水平排列開始。
void SlidersGroup::setValue(int value) { slider->setValue(value); }
setValue()槽設(shè)置QSlider的值,我們不需要在QScrollBar和QDial小部件上顯式地調(diào)用setValue(),因?yàn)镼Slider將在其值發(fā)生變化時(shí)發(fā)出valueChanged()信號(hào),從而觸發(fā)多米諾骨牌效應(yīng)。
void SlidersGroup::setMinimum(int value) { slider->setMinimum(value); scrollBar->setMinimum(value); dial->setMinimum(value); } void SlidersGroup::setMaximum(int value) { slider->setMaximum(value); scrollBar->setMaximum(value); dial->setMaximum(value); }
setMinimum()和setMaximum()槽被Window類用來(lái)設(shè)置QSlider、QScrollBar和QDial小部件的范圍。
void SlidersGroup::invertAppearance(bool invert) { slider->setInvertedAppearance(invert); scrollBar->setInvertedAppearance(invert); dial->setInvertedAppearance(invert); } void SlidersGroup::invertKeyBindings(bool invert) { slider->setInvertedControls(invert); scrollBar->setInvertedControls(invert); dial->setInvertedControls(invert); }
invertAppearance()和invertKeyBindings()插槽控制子部件的和屬性。
void SlidersGroup::setOrientation(Qt::Orientation orientation) { slidersLayout->setDirection(orientation == Qt::Horizontal ? QBoxLayout::TopToBottom : QBoxLayout::LeftToRight); scrollBar->setOrientation(orientation); slider->setOrientation(orientation); }
setOrientation()插槽控制布局的方向和滑塊的方向,在水平組中,滑塊具有水平方向,并且彼此堆疊在一起。在垂直組中,滑塊具有垂直方向,并且彼此相鄰布局。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn