滑块示例显示了如何使用 Qt: 和 中可用的不同类型的滑块。
Qt提供了三种类型的类似滑块的小部件:和 。它们都继承了 的大部分功能,理论上可以在应用程序中相互替换,因为差异只涉及它们的外观和感觉。此示例显示了它们的外观、工作方式以及如何通过其属性操纵它们的行为和外观。
该示例还演示了如何使用信号和插槽来同步两个或多个小部件的行为。
滑块示例的屏幕截图
滑块示例由两个类组成:
SlidersGroup
是一个自定义小部件。它结合了 a 、a 和 a 。Window
是组合 a 和 a 的主要小部件。在此示例中,提供了两个小部件的堆栈。包含几个控制类似滑块的小部件的行为的小部件。SlidersGroup
首先我们将复习课程,然后我们将看看课程。Window
SlidersGroup
窗口类定义
<span style="color:#404244"><span style="background-color:#3a4055"><span style="color:#ffffff"><span style="color:#ffff55">class</span> <span style="color:#4f9d08">Window</span> <span style="color:#ffffff">:</span> <span style="color:#ffff55">public</span> <a data-cke-saved-href="https://doc.qt.io/qt-6/qwidget.html" href="https://doc.qt.io/qt-6/qwidget.html"><span style="color:#21be2b">QWidget</span></a>
<span style="color:#ffffff">{</span><span style="color:#ffffff">
Q_OBJECT
</span><span style="color:#ffff55">public</span><span style="color:#ffffff">:</span>
<span style="color:#4f9d08">Window</span><span style="color:#ffffff">(</span><a data-cke-saved-href="https://doc.qt.io/qt-6/qwidget.html" href="https://doc.qt.io/qt-6/qwidget.html"><span style="color:#21be2b">QWidget</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">parent </span><span style="color:#ffffff">=</span> <span style="color:#ffff55">nullptr</span><span style="color:#ffffff">);</span>
<span style="color:#ffff55">private</span><span style="color:#ffffff">:</span>
<span style="color:#ffff55">void</span><span style="color:#ffffff"> createControls</span><span style="color:#ffffff">(</span><span style="color:#ffff55">const</span> <a data-cke-saved-href="https://doc.qt.io/qt-6/qstring.html" href="https://doc.qt.io/qt-6/qstring.html"><span style="color:#21be2b">QString</span></a> <span style="color:#ffffff">&</span><span style="color:#ffffff">title</span><span style="color:#ffffff">);</span>
<span style="color:#ffff55">void</span><span style="color:#ffffff"> resizeEvent</span><span style="color:#ffffff">(</span><a data-cke-saved-href="https://doc.qt.io/qt-6/qresizeevent.html" href="https://doc.qt.io/qt-6/qresizeevent.html"><span style="color:#21be2b">QResizeEvent</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">e</span><span style="color:#ffffff">);</span>
<span style="color:#4f9d08">SlidersGroup</span> <span style="color:#ffffff">*</span><span style="color:#ffffff">horizontalSliders</span><span style="color:#ffffff">;</span>
<span style="color:#4f9d08">SlidersGroup</span> <span style="color:#ffffff">*</span><span style="color:#ffffff">verticalSliders</span><span style="color:#ffffff">;</span>
<a data-cke-saved-href="https://doc.qt.io/qt-6/qstackedwidget.html" href="https://doc.qt.io/qt-6/qstackedwidget.html"><span style="color:#21be2b">QStackedWidget</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">stackedWidget</span><span style="color:#ffffff">;</span>
<a data-cke-saved-href="https://doc.qt.io/qt-6/qgroupbox.html" href="https://doc.qt.io/qt-6/qgroupbox.html"><span style="color:#21be2b">QGroupBox</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">controlsGroup</span><span style="color:#ffffff">;</span>
<a data-cke-saved-href="https://doc.qt.io/qt-6/qlabel.html" href="https://doc.qt.io/qt-6/qlabel.html"><span style="color:#21be2b">QLabel</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">minimumLabel</span><span style="color:#ffffff">;</span>
<a data-cke-saved-href="https://doc.qt.io/qt-6/qlabel.html" href="https://doc.qt.io/qt-6/qlabel.html"><span style="color:#21be2b">QLabel</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">maximumLabel</span><span style="color:#ffffff">;</span>
<a data-cke-saved-href="https://doc.qt.io/qt-6/qlabel.html" href="https://doc.qt.io/qt-6/qlabel.html"><span style="color:#21be2b">QLabel</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">valueLabel</span><span style="color:#ffffff">;</span>
<a data-cke-saved-href="https://doc.qt.io/qt-6/qcheckbox.html" href="https://doc.qt.io/qt-6/qcheckbox.html"><span style="color:#21be2b">QCheckBox</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">invertedAppearance</span><span style="color:#ffffff">;</span>
<a data-cke-saved-href="https://doc.qt.io/qt-6/qcheckbox.html" href="https://doc.qt.io/qt-6/qcheckbox.html"><span style="color:#21be2b">QCheckBox</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">invertedKeyBindings</span><span style="color:#ffffff">;</span>
<a data-cke-saved-href="https://doc.qt.io/qt-6/qspinbox.html" href="https://doc.qt.io/qt-6/qspinbox.html"><span style="color:#21be2b">QSpinBox</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">minimumSpinBox</span><span style="color:#ffffff">;</span>
<a data-cke-saved-href="https://doc.qt.io/qt-6/qspinbox.html" href="https://doc.qt.io/qt-6/qspinbox.html"><span style="color:#21be2b">QSpinBox</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">maximumSpinBox</span><span style="color:#ffffff">;</span>
<a data-cke-saved-href="https://doc.qt.io/qt-6/qspinbox.html" href="https://doc.qt.io/qt-6/qspinbox.html"><span style="color:#21be2b">QSpinBox</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">valueSpinBox</span><span style="color:#ffffff">;</span>
<a data-cke-saved-href="https://doc.qt.io/qt-6/qcombobox.html" href="https://doc.qt.io/qt-6/qcombobox.html"><span style="color:#21be2b">QComboBox</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">orientationCombo</span><span style="color:#ffffff">;</span>
<a data-cke-saved-href="https://doc.qt.io/qt-6/qgridlayout.html" href="https://doc.qt.io/qt-6/qgridlayout.html"><span style="color:#21be2b">QGridLayout</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">layout</span><span style="color:#ffffff">;</span>
<span style="color:#ffff55">double</span><span style="color:#ffffff"> oldAspectRatio</span><span style="color:#ffffff">;</span>
<span style="color:#ffffff">};</span></span></span></span>
该类继承自 。它显示滑块小部件,并允许用户设置其最小值、最大值和当前值,并自定义其外观、键绑定和方向。我们使用私有函数来创建提供这些控制机制的小部件,并将它们连接到滑块小部件。Window
createControls()
窗口类实现
<span style="color:#404244"><span style="background-color:#3a4055"><span style="color:#ffffff"><span style="color:#4f9d08">Window</span><span style="color:#ffffff">::</span><span style="color:#4f9d08">Window</span><span style="color:#ffffff">(</span><a data-cke-saved-href="https://doc.qt.io/qt-6/qwidget.html" href="https://doc.qt.io/qt-6/qwidget.html"><span style="color:#21be2b">QWidget</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">parent</span><span style="color:#ffffff">)</span>
<span style="color:#ffffff">:</span> <a data-cke-saved-href="https://doc.qt.io/qt-6/qwidget.html" href="https://doc.qt.io/qt-6/qwidget.html"><span style="color:#21be2b">QWidget</span></a><span style="color:#ffffff">(</span><span style="color:#ffffff">parent</span><span style="color:#ffffff">)</span>
<span style="color:#ffffff">{</span><span style="color:#ffffff">
horizontalSliders </span><span style="color:#ffffff">=</span> <span style="color:#ffff55">new</span> <span style="color:#4f9d08">SlidersGroup</span><span style="color:#ffffff">(</span><a data-cke-saved-href="https://doc.qt.io/qt-6/qt.html" href="https://doc.qt.io/qt-6/qt.html"><span style="color:#21be2b">Qt</span></a><span style="color:#ffffff">::</span><span style="color:#4f9d08">Horizontal</span><span style="color:#ffffff">,</span><span style="color:#ffffff"> tr</span><span style="color:#ffffff">(</span><span style="color:#aaaaaa">"Horizontal"</span><span style="color:#ffffff">));</span><span style="color:#ffffff">
verticalSliders </span><span style="color:#ffffff">=</span> <span style="color:#ffff55">new</span> <span style="color:#4f9d08">SlidersGroup</span><span style="color:#ffffff">(</span><a data-cke-saved-href="https://doc.qt.io/qt-6/qt.html" href="https://doc.qt.io/qt-6/qt.html"><span style="color:#21be2b">Qt</span></a><span style="color:#ffffff">::</span><span style="color:#4f9d08">Vertical</span><span style="color:#ffffff">,</span><span style="color:#ffffff"> tr</span><span style="color:#ffffff">(</span><span style="color:#aaaaaa">"Vertical"</span><span style="color:#ffffff">));</span><span style="color:#ffffff">
stackedWidget </span><span style="color:#ffffff">=</span> <span style="color:#ffff55">new</span> <a data-cke-saved-href="https://doc.qt.io/qt-6/qstackedwidget.html" href="https://doc.qt.io/qt-6/qstackedwidget.html"><span style="color:#21be2b">QStackedWidget</span></a><span style="color:#ffffff">;</span><span style="color:#ffffff">
stackedWidget</span><span style="color:#ffffff">-</span><span style="color:#ffffff">></span><span style="color:#ffffff">addWidget</span><span style="color:#ffffff">(</span><span style="color:#ffffff">horizontalSliders</span><span style="color:#ffffff">);</span><span style="color:#ffffff">
stackedWidget</span><span style="color:#ffffff">-</span><span style="color:#ffffff">></span><span style="color:#ffffff">addWidget</span><span style="color:#ffffff">(</span><span style="color:#ffffff">verticalSliders</span><span style="color:#ffffff">);</span><span style="color:#ffffff">
createControls</span><span style="color:#ffffff">(</span><span style="color:#ffffff">tr</span><span style="color:#ffffff">(</span><span style="color:#aaaaaa">"Controls"</span><span style="color:#ffffff">));</span></span></span></span>
在构造函数中,我们首先创建两个水平和垂直显示滑块小部件的小部件,并将它们添加到 .提供一堆小部件,其中只有顶部小部件可见。通过我们创建从控制小部件到 的连接,使用户能够在滑块小部件的水平和垂直方向之间进行选择。其余的控制机制由相同的函数调用实现。SlidersGroup
createControls()
<span style="color:#404244"><span style="background-color:#3a4055"><span style="color:#ffffff"><span style="color:#ffffff"> connect</span><span style="color:#ffffff">(</span><span style="color:#ffffff">horizontalSliders</span><span style="color:#ffffff">,</span> <span style="color:#ffffff">&</span><span style="color:#4f9d08">SlidersGroup</span><span style="color:#ffffff">::</span><span style="color:#ffffff">valueChanged</span><span style="color:#ffffff">,</span><span style="color:#ffffff">
verticalSliders</span><span style="color:#ffffff">,</span> <span style="color:#ffffff">&</span><span style="color:#4f9d08">SlidersGroup</span><span style="color:#ffffff">::</span><span style="color:#ffffff">setValue</span><span style="color:#ffffff">);</span><span style="color:#ffffff">
connect</span><span style="color:#ffffff">(</span><span style="color:#ffffff">verticalSliders</span><span style="color:#ffffff">,</span> <span style="color:#ffffff">&</span><span style="color:#4f9d08">SlidersGroup</span><span style="color:#ffffff">::</span><span style="color:#ffffff">valueChanged</span><span style="color:#ffffff">,</span><span style="color:#ffffff">
valueSpinBox</span><span style="color:#ffffff">,</span> <span style="color:#ffffff">&</span><a data-cke-saved-href="https://doc.qt.io/qt-6/qspinbox.html" href="https://doc.qt.io/qt-6/qspinbox.html"><span style="color:#21be2b">QSpinBox</span></a><span style="color:#ffffff">::</span><span style="color:#ffffff">setValue</span><span style="color:#ffffff">);</span><span style="color:#ffffff">
connect</span><span style="color:#ffffff">(</span><span style="color:#ffffff">valueSpinBox</span><span style="color:#ffffff">,</span> <span style="color:#ffffff">&</span><a data-cke-saved-href="https://doc.qt.io/qt-6/qspinbox.html" href="https://doc.qt.io/qt-6/qspinbox.html"><span style="color:#21be2b">QSpinBox</span></a><span style="color:#ffffff">::</span><span style="color:#ffffff">valueChanged</span><span style="color:#ffffff">,</span><span style="color:#ffffff">
horizontalSliders</span><span style="color:#ffffff">,</span> <span style="color:#ffffff">&</span><sp