Skip to content

正点原子QT之输入窗口部件 ​

5. 输入窗口部件 ​

概述 ​

(1) Comb Box:组合框
(2) Font Comb Box:字体组合框
(3) Line Edit:单行编辑框  
(4) Text Edit:文本编辑框
(5) Plain Text Edit:纯文本编辑框
(6) Spin Box:数字旋转框
(7) Double Spin Box:双精度数字旋转框
(8) Time Edit:时间编辑框
(9) Date Edit:日期编辑框
(10) Date/Time Edit:日期时间编辑框
(11) Dial:数字拨盘框
(12) Horizontal Scroll Bar:水平滚动条
(13) Vertical Scroll Bar:垂直滚动条
(14) Horizontal Slider:水平滑动条
(15) Vertical Slider:垂直滑动条
(16) Key sequence Edit:按键序列编辑框

5.1 Comb Box:组合框 ​

QComboBox 继承 QWidget 类,被 QFontComboBox 类继承。
通常用于用户显示选项列表的方法,这种方法占用最少的屏幕空间。  

QComboBox 我们常会在一些需要下拉列表选择的项目中用到。比如 QQ 登录如果有多个帐号选择就需要这个

案例: 通过点击下拉按钮的项,选择其中一项 ​

例 10_qcombobox,选择省份(难度:简单),通过点击下拉按钮的项,选择其中一项,然后打印出当前选择项的内容。

cpp
#include "mainwindow.h"
/* 引入QDebug */
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    /* 设置主窗体的显示位置与大小 */
    this->setGeometry(0, 0, 800, 480);

    /* 实例化对象 */
    comboBox = new QComboBox(this);

    /* 设置comboBox的显示位置与大小 */
    comboBox->setGeometry(300, 200, 150, 30);

    /* 添加项,我们添加三个省份,作为comboBox的三个选项 */
    comboBox->addItem("广东(默认)");
    comboBox->addItem("湖南");
    comboBox->addItem("四川");

    /* 信号槽连接 */
    connect(comboBox, SIGNAL(currentIndexChanged(int)), this,
            SLOT(comboBoxIndexChanged(int)));
}

MainWindow::~MainWindow()
{
}

void MainWindow::comboBoxIndexChanged(int index)
{
    /* 打印出选择的省份 */
    qDebug()<<"您选择的省份是"<< comboBox->itemText(index)<<endl;
}

5.2 Font Comb Box:字体组合框 ​

QFontComboBox 继承 QComboBox。QFontComboBox 小部件是一个允许用户选择字体系列的组合框。 组合框中填充了按字母顺序排列的字体家族名称列表。 
FontComboBox 常用于工具栏,与 ComboBox 一起用于控制字体大小,并与两个 ToolButtons 一起用于粗体和斜体。

QFontComboBox 类提供了下拉选择字体系列的组合框小部件。手机,电脑一些软件都有设置字体的功能,由用户自行选择

案例: 参见5.1 这个可以改变字体 ​

例 11_qfontcombobox,字体选择(难度:简单),通过点击下拉按钮的项,选择其中一项,然后打印出当前选择项的内容。

cpp
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    /* 设置主窗体的显示位置和大小 */
    this->setGeometry(0, 0, 800, 480);

    /* 实例化对象 */
    fontComboBox = new QFontComboBox(this);
    label = new QLabel(this);

    /* 设置显示的位置与大小 */
    fontComboBox->setGeometry(280, 200, 200, 30);
    label->setGeometry(280, 250, 300, 50);

    /* 信号与槽连接 */
    connect(fontComboBox, SIGNAL(currentFontChanged(QFont)), this,
            SLOT(fontComboBoxFontChanged(QFont)));
}

MainWindow::~MainWindow()
{
}

/* 槽函数实现 */
void MainWindow::fontComboBoxFontChanged(QFont font)
{
    /* 将label里的文本内容设置为所选择的字体 */
    label->setFont(font);

    /* 定义一个字符串接收当前项的字体 */
    QString str = "用此标签显示字体效果\n设置的字体为:" +
            fontComboBox->itemText(fontComboBox->currentIndex());

    /* 将字符串的内容作为label的显示内容 */
    label->setText(str);
}

5.3 Line Edit:单行编辑框 ​

QLineEdit 继承 QWidget。 QLineEdit 小部件是一个单行文本编辑器。行编辑允许用户使用一组有用的编辑函数输入和编辑一行纯文本,包括撤消和重做、剪切和粘贴以及拖放。通过更改行编辑的 echoMode(),它还可以用作“只写”字段,用于输入如密码等。

QLineEdit 小部件是一个单行文本编辑器。行编辑允许用户使用一组有用的编辑函数输入和编辑一行纯文本。 包括撤消和重做、剪切和粘贴以及拖放。通过更改行编辑的 echoMode(),它还可以用作“只写”字段,用于输入如密码等

案例: 单行输入框,获取输入框内容 ​

例 12_qlineedit, 单行输入框(难度:简单),通过点击下拉按钮的项,选择其中一项,然后打印出当前选择项的内容。

程序编译运行的结果如下,当在 QLineEdit单行输入框内输入文本内容后,单击 QPushButton确认按钮后, QLabel 的文本内容将显示您所输入的内容。然后 QLineEdit 将清空,可再次输入。

cpp
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(0, 0, 800, 480);

    lineEdit = new QLineEdit(this);
    lineEdit->setGeometry(280, 200, 200, 20);

    pushButton = new QPushButton(this);
    pushButton->setGeometry(500, 200, 50, 20);
    pushButton->setText("确认");

    label = new QLabel(this);
    label->setGeometry(280, 250, 400, 20);
    label->setText("你输入的内容是:");

    /* 信号槽连接 */
    connect(pushButton,SIGNAL(clicked()), this,
            SLOT(pushButtonClicked()));
}

MainWindow::~MainWindow()
{
}

void MainWindow::pushButtonClicked()
{
    /* 字符串变量str */
    QString str;

    str = "你输入的内容是:";
    str += lineEdit->text();

    /* 设置label里的文本显示内容 */
    label->setText(str);
    /* 在点击了确认键之后清空lineEdit单行输入框 */
    lineEdit->clear();
}

5.4 Text Edit:文本编辑框 ​

QTextEdit 继承 QAbstractScrollArea,被 QTextBrowser 继承。 QTextEdit 是一个高级所见即所得查看器/编辑器,支持使用 html 样式的标记进行 rich text 格式化。它经过优化以处理大型文档并快速响应用户输入。 QTextEdit 用于段落和字符。段落是格式化的字符串,它被字包装以适应小部件的宽度。在阅读纯文本时,默认情况下,一个换行表示一个段落。一份文件由零个或多个段落组成。段落中的文字与段落的对齐方式一致。
段落之间用硬换行符隔开。段落中的每个字符都有自己的属性,例如字体和颜色。 QTextEdit 可以显示图像,列表和表格。如果文本太大而无法在文本编辑的视图中查看,视图中则会出现滚动条。

QTextEdit 类提供了一个查看器/编辑器小部件。

案例:全选和清除编辑框内的全部内容 ​

例 13_qtextedit 文本编辑框(难度:简单),用一个 QTextEdit 来演示文本的输入,用两个QPushButton 来模拟文本编辑的全选与清除。在 QTextEdit 里也可用键盘的快捷键(如 Ctrl+A)来完成全选,复制,粘贴等操作。 Qt 提供了全选,复制粘贴等这一类的函数方便用户操作

在编辑框里输入文字后,点击按钮全选,点击清除则清除编辑框内的全部内容。如下图为点击全选的效果。

cpp
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    /* 设置主窗体显示的位置和大小 */
    this->setGeometry(0, 0, 800, 480);

    /* 实例和对象,设置位置和显示大小 */
    textEdit = new QTextEdit(this);
    textEdit->setGeometry(0, 0, 800, 400);

    /* 实例和对象,设置位置和显示大小,设置文本 */
    pushButtonSelectAll = new QPushButton(this);
    pushButtonSelectAll->setGeometry(200, 420, 50, 20);
    pushButtonSelectAll->setText("全选");

    /* 实例和对象,设置位置和显示大小,设置文本 */
    pushButtonClearAll = new QPushButton(this);
    pushButtonClearAll->setGeometry(500, 420, 50, 20);
    pushButtonClearAll->setText("清除");

    /* 信号槽连接 */
    connect(pushButtonSelectAll, SIGNAL(clicked()), this,
            SLOT(pushButtonSelectAllClicked()));
    connect(pushButtonClearAll, SIGNAL(clicked()), this,
            SLOT(pushButtonClearAllClicked()));

}

MainWindow::~MainWindow()
{
}

void MainWindow::pushButtonSelectAllClicked()
{
    /* 设置焦点为textEdit */
    textEdit->setFocus();
    /* 判断文本编辑框内容是否为空,不为空则全选 */
    if(!textEdit->toPlainText().isEmpty()){
        /* 全选 */
        textEdit->selectAll();
    }
}

void MainWindow::pushButtonClearAllClicked()
{
    /* 清空textEdit里的文本内容 */
    textEdit->clear();
}

5.5 Plain Text Edit:纯文本编辑框 ​

QPlainTextEdit 是一个支持纯文本的高级查看器/编辑器。它被优化为处理大型文档和快速响应用户输入。

QPlainTextEdit 类提供了一个用于编辑和显示纯文本的小部件,常用于显示多行文本或简单文本。

案例: 设置只读模式 ​

例 14_qplaintextedit 文本浏览编辑器(难度:简单),用一个 QPlainTextEdit 来读取本当前工程里的一个文件,并用一个 RadioButton 里将 QPlainTextEdit 设为只读。

当 程 序 正 常 运 行 后 会 打 开 程 序 当 前 路 径 下 的 ”moc_mainwindow.cpp” 文 件 ,( 注 意 在 Windows 下 moc_mainwindow.cpp 应 该 写 成 ”../moc_mainwindow.cpp”),且在 QPlainTextEdit 编辑框下是可编辑的,当选中程序界面上的只读模式时, QPlainTextEdit 编辑框就不可以再编辑。相反可以取消只读模式则可以再编辑。

cpp
#include "mainwindow.h"
#include <QDir>
#include <QTextStream>
#include <QCoreApplication>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    /* 设置当前程序的工作目录为可执行程序的工作目录 */
    QDir::setCurrent(QCoreApplication::applicationDirPath());

    this->setGeometry(0, 0, 800, 480);

    plainTextEdit = new QPlainTextEdit(this);
    plainTextEdit->setGeometry(0, 50, 800, 430);

    radioButton = new QRadioButton(this);
    radioButton->setGeometry(650, 20, 100, 20);
    radioButton->setText("只读模式");

    /* 打开可执行程序目录里的moc_mainwindow.cpp,注意如果是Windows下
   moc_mainwindow.cpp并不在当前目录,而在上一级目录"../moc_mainwindow.cpp"*/
    QFile file("moc_mainwindow.cpp");

    /* 以只读模式打开,但是可以在plainTextEdit里编辑 */
    file.open((QFile::ReadOnly | QFile::Text));

    /* 加载到文件流 */
    QTextStream in(&file);

    /* 从文本流中读取全部 */
    plainTextEdit->insertPlainText(in.readAll());

    /* 信号槽连接 */
    connect(radioButton, SIGNAL(clicked()), this,
            SLOT(radioButtonClicked()));

}

MainWindow::~MainWindow()
{
}

void MainWindow::radioButtonClicked()
{
    /* 检查radioButton是否选中 */
    if(radioButton->isChecked()) {
        /* 设置为只读模式 */
        plainTextEdit->setReadOnly(true);
    } else {
        /* 设置为非只读模式 */
        plainTextEdit->setReadOnly(false);
    }
}

5.6 Spin Box:数字旋转框 ​

QSpinBox 继承 QAbstractSpinBox。用于处理整数和离散值(例如:月份名称)而 QDoubleSpinBox 则用于处理浮点值。他们之间的区别就是处理数据的类型不同,其他功能都基本相同。QSpinBox 允许用户通过单击上/下按钮或按下键盘上的上/下按钮来选择一个值,以增加/减少当前显示的值。用户还可以手动输入值。

QSpinBox 类提供了一个微调框小部件。

案例: 调节程序窗体的整体不透明度 ​

例 15_qspinbox 窗口背景不透明调节器(难度:简单),用一个 QSpinBox 来调节程序窗体的整体不透明度。

程序初始化界面时是全不透明,不透明度值为 100%,当点击向下调节 SpinBox 后,整个窗体的不透明将会变小。当不透明度的值变小时,窗口将透明化。

cpp
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(0, 0, 800, 480);

    /* 设置主窗口背景颜色,rgb颜色标准,a代表不透明度(0~100)*/
    this->setStyleSheet("QMainWindow{background-color: "
                        "rgba(100, 100, 100, 100%) }");

    spinBox = new QSpinBox(this);
    spinBox->setGeometry(350, 200, 150, 30);

    /* 设置范围0~100 */
    spinBox->setRange(0, 100);

    /* 设置步长为10 */
    spinBox->setSingleStep(10);

    /* 设置初始值为100 */
    spinBox->setValue(100);

    /* 设置后缀 */
    spinBox->setSuffix("%不透明度");

    /* 信号槽连接 */
    connect(spinBox,SIGNAL(valueChanged(int)), this,
            SLOT(spinBoxValueChanged(int)));
}

MainWindow::~MainWindow()
{
}

void MainWindow::spinBoxValueChanged(int opacity)
{
    /* 转换为double数据类型 */
    double  dobleopacity = (double)opacity / 100;

    /* 设置窗体不透明度,范围是0.0~1.0。1则为不透明,0为全透明 */
    this->setWindowOpacity(dobleopacity);
}

5.7 Double Spin Box:双精度数字旋转框 ​

QDoubleSpinBox 继承 QAbstractSpinBox。 QDoubleSpinBox 则用于处理浮点值。 QDoubleSpinBox 允许用户通过单击“向上”和“向下”按钮或按下键盘上的“向上”或“向下”按钮来选择当前显示的值。用户还可以手动输入值。

QDoubleSpinBox 类提供了一个用于处理浮点值微调框小部件。与 QSpinBox 作用基本一样,与 QSpinBox 不同的是, QDoubleSpinBox 类处理的是浮点值数据。

案例: 调节程序窗口的整体大小 ​

例 16_qdoublespinbox 窗口大小调节器(难度:简单),用一个 QDoubleSpinBox 来调节程序窗口的整体大小。

程序初始化界面窗口大小值为 100%,当点击向下调节QDoubleSpinBox 时,整个窗体将按 QDoubleSpinBox 里数值的比例缩小,最小为 50.00%,相反当点击向上调节 QDoubleSpinBox 时,窗口大小将整体变大,最大为 100.00%。

cpp
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(0, 0, 800, 480);

    /* 实例化和设置显示的位置与大小 */
    doubleSpinBox = new QDoubleSpinBox(this);
    doubleSpinBox->setGeometry((this->width() - 200) / 2,
                               (this->height() - 30) / 2,
                               200, 30);
    /* 设置前缀 */
    doubleSpinBox->setPrefix("窗口大小");

    /* 设置后缀 */
    doubleSpinBox->setSuffix("%");

    /* 设置范围 */
    doubleSpinBox->setRange(50.00, 100.00);

    /* 设置初始值 */
    doubleSpinBox->setValue(100.00);

    /* 设置步长 */
    doubleSpinBox->setSingleStep(0.1);

    /* 信号槽连接 */
    connect(doubleSpinBox, SIGNAL(valueChanged(double)),
            SLOT(doubleSpinBoxValueChanged(double)));

}

MainWindow::~MainWindow()
{
}

void MainWindow::doubleSpinBoxValueChanged(double value)
{
    /* 重新计算窗口的宽与高 */
    int w = 800 * value / 100;
    int h = 480 * value / 100;

    /* 重新设置窗口的宽与高 */
    this->setGeometry(0, 0, w, h);

    /* 重新设置doubleSpinBox的显示位置 */
    doubleSpinBox->setGeometry((this->width() - 200) / 2,
                               (this->height() - 30) / 2,
                               200, 30);

}

5.8 Time Edit:时间编辑框 ​

QTimeEdit 继承 QDateTimeEdit。 QTimeEdit 用于编辑时间,而 QDateEdit 用于编辑日期。

案例:参见 5.10 ​

5.9 Date Edit:日期编辑框 ​

QDateEdit 继承 QDateTimeEdit。 QDateEdit 用于编辑日期,而 QTimeEdit 用于编辑时间。

案例: 参见 5.10 ​

5.10 Date/Time Edit:日期时间编辑框 ​

QDateTimeEdit 类提供了一个用于编辑日期和时间的小部件。 QDateTimeEdit 允许用户使用键盘或箭头键编辑日期,以增加或减少日期和时间值。箭头键可用于在 QDateTimeEdit 框中从一个区域移动到另一个区域。

案例: 日期和时间 ​

例 17_qdatetimeedit 时间日期展示(难度简单),使用一个 QDateTimeEdit,一个 QTimeEdit以及一个 QDateEdit,传入当前系统时间与日期,展示简单的日期时间控件使用方法。

当程序初始化时,分别显示系统当前的时间与日期(注意,windows 下 Qt 程序显示的格式可能不一样,下图为 linux 下的 Qt 程序日期显示格式)。

cpp
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    /* 设置位置与大小 */
    this->setGeometry(0, 0, 800, 480);

    /*实例化对象,传入当前日期与时间*/
    dateTimeEdit = new QDateTimeEdit(
                QDateTime::currentDateTime(),this);
    dateTimeEdit->setGeometry(300, 200, 200, 30);
    /* 弹出日期控件与否 */
    //dateTimeEdit->setCalendarPopup(true);

    /* 实例化对象,传入当前时间 */
    timeEdit = new QTimeEdit(QTime::currentTime(),this);
    timeEdit->setGeometry(300, 240, 200, 30);

    /* 实例化对象,传入当前日期 */
    dateEdit = new QDateEdit(QDate::currentDate(),this);
    dateEdit->setGeometry(300, 280, 200, 30);
}

MainWindow::~MainWindow()
{
}

5.11 Dial:数字拨盘框 ​

QDial 类提供了一个圆形范围控制(如速度计或电位器)。 QDial 用于当用户需要在可编程定义的范围内控制一个值,并且该范围要么是环绕的(例如,从 0 到 359 度测量的角度),要么对话框布局需要一个正方形小部件。由于 QDial 从 QAbstractSlider 继承,因此拨号的行为与滑块类似。 当 wrapping()为 false(默认设置)时,滑块和刻度盘之间没有真正的区别。 它们共享相同的信号,插槽和成员功能。 您使用哪一个取决于您的用户期望和应用程序类型。

案例: 车速表 ​

例 18_qdial 车速表(难度:简单),使用一个 QDial,以一个 QLabel,演示 QDial 的用法。当程序初始化界面后,拖动滑块的位置, label 则会显示 dial 的值。

序初始化时, QDial 控件的显示如下(注意, windows 下QDial 控件显示的格式可能不一样,下图为 linux 下的 QDial 控件的显示样式)。当用鼠标拖动滑块或者按键盘的上下左右方向键时, label 则会显示当前“车速”。

QDial 在很多场合都能使用,比如音量控制,汽车仪表盘,芝麻信用分等场合都可以使用到,只是需要我们有这个创意和想法,还需要个人的美工基础。

cpp
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    /* 设置主窗体的位置与大小 */
    this->setGeometry(0, 0, 800, 480);

    /* 实例化对象和设置显示位置与大小 */
    dial = new QDial(this);
    dial->setGeometry(300, 100, 200, 200);

    /* 设置页长(两个最大刻度的间距)*/
    dial->setPageStep(10);

    /* 设置刻度可见 */
    dial->setNotchesVisible(true);

    /* 设置两个凹槽之间的目标像素数 */
    dial->setNotchTarget(1.00);

    /* 设置dial值的范围 */
    dial->setRange(0,100);

    /* 开启后可指向圆的任何角度 */
    //dial->setWrapping(true);

    /* 实例化对象和设置显示位置与大小 */
    label = new QLabel(this);
    label->setGeometry(370, 300, 200, 50);

    /* 初始化为0km/h */
    label->setText("0km/h");

    /* 信号槽连接 */
    connect(dial, SIGNAL(valueChanged(int)),
            this, SLOT(dialValueChanged(int)));
}

MainWindow::~MainWindow()
{
}

void MainWindow::dialValueChanged(int val)
{
    /* QString::number()转换成字符串 */
    label->setText(QString::number(val) + "km/h");
}

5.12 Horizontal Scroll Bar:水平滚动条 ​

QScrollBar 继承 QAbstractSlider。 QScrollBar 小部件提供垂直或水平滚动条,允许用户访问比用于显示文档的小部件大的文档部分。它提供了用户在文档中的当前位置和可见文档数量的可视化指示。滚动条通常配有其他控件,可以实现更精确的导航。

案例: 水平滚动条和垂直滚动条 ​

例 19_qscrollbar 创建水平和垂直滚动条(难度:简单),使用 QScrollBar 类实例化两个控件,一个是水平滚动条,另一个是垂直滚动条,中间用一个标签文本来显示。(本例只创建实例,不对效果进行细化(请注意:一般水平或垂直滚动条都用 QScrollArea 搭配其他控件使用,不单独使用 QScrollBar 去创建滚动条,有些控件“自带”滚动条,例如 QListWidget 等,都可以用 QScrollArea 来设置它的属性)。

如下当程序初始化时,滚动条控件的显示如下

cpp
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    /* 设置主窗体大小,位置 */
    this->setGeometry(0,0,800,480);

    /* 实例化水平滚动条及设置位置大小 */
    horizontalScrollBar = new QScrollBar(Qt::Horizontal, this);
    horizontalScrollBar->setGeometry(0, 450, 800, 30);

    /* 实例化垂直滚动条及设置位置大小 */
    verticalScrollBar = new QScrollBar(Qt::Vertical, this);
    verticalScrollBar->setGeometry(770, 0, 30, 480);

    /* 实例化,标签文本 */
    label = new QLabel(this);
    /* 设置文本 */
    label->setText("这是一个测试");
    /* 设置位置大小 */
    label->setGeometry(300, 200, 100, 20);
}

MainWindow::~MainWindow()
{
}

5.13 Vertical Scroll Bar:垂直滚动条 ​

QScrollBar 继承 QAbstractSlider。 QScrollBar 小部件提供垂直或水平滚动条,允许用户访问比用于显示文档的小部件大的文档部分。它提供了用户在文档中的当前位置和可见文档数量的可视化指示。滚动条通常配有其他控件,可以实现更精确的导航

5.14 Horizontal Slider:水平滑动条 ​

QSlider 继承 QAbstractSlider。 QSlider 类提供垂直或水平滑动条小部件, 滑动条是用于控制有界值的典型小部件。它允许用户沿着水平或垂直凹槽移动滑块手柄,并将手柄的位置转换为合法范围内的整数值

案例: 水平和垂直滑动条 ​

例 20_qslider 创建水平和垂直滑动条(难度:简单)创建两个 QSlider 对象,一个是水平滑动条,另一个是垂直滑动条;用一个 Label 来显示当前水平或垂直滑动条当前的值。设置水平滑动条与水平滑动条相互关联,通过滑动其中一个滑动条的值相应的也会改变另一个滑动条的值。

cpp
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(0, 0, 800, 480);

    /* 实例化水平滑动条对象*/
    horizontalSlider = new QSlider(Qt::Horizontal, this);

    /* 设置显示的位置与大小 */
    horizontalSlider->setGeometry(250, 100, 200, 20);

    /* 设置值范围 */
    horizontalSlider->setRange(0, 100);

    /* 实例化垂直滑动条对象 */
    verticalSlider = new QSlider(Qt::Vertical, this);

    /* 设置显示的位置与大小 */
    verticalSlider->setGeometry(200, 50, 20, 200);

    /* 设置值范围 */
    verticalSlider->setRange(0, 100);

    /* 实例化标签文本 */
    label = new QLabel("滑动条值:0", this);
    label->setGeometry(250, 200, 100, 20);

    /* 信号槽连接 */
    connect(horizontalSlider, SIGNAL(valueChanged(int)),
            this, SLOT(horizontalSliderValueChanged(int)));
    connect(verticalSlider, SIGNAL(valueChanged(int)),
            this, SLOT(verticalSliderValueChanged(int)));

}

MainWindow::~MainWindow()
{
}

void MainWindow::horizontalSliderValueChanged(int val)
{
    /* 当水平滑动条的值改变时,改变垂直滑动条的值 */
    verticalSlider->setSliderPosition(val);

    /* 将int类型转变成字符 */

    QString str = "滑动条值:" + QString::number(val);

    /* 显示当前垂直或水平滑动条的值 */
    label->setText(str);

}

void MainWindow::verticalSliderValueChanged(int val)
{
    /* 当垂直滑动条的值改变时,改变水平滑动条的值 */
    horizontalSlider->setSliderPosition(val);
}

5.15 Vertical Slider:垂直滑动条 ​

QSlider 继承 QAbstractSlider。 QSlider 类提供垂直或水平滑动条小部件, 滑动条是用于控制有界值的典型小部件。它允许用户沿着水平或垂直凹槽移动滑块手柄,并将手柄的位置转换为合法范围内的整数值

5.16 Key sequence Edit:按键序列编辑框 ​

QKeySequenceEdit 继承 QWidget。这个小部件允许用户选择 QKeySequence, QKeySequence通常用作快捷方式。当小部件接收到焦点并在用户释放最后一个键后一秒结束时,将启动记录,通常用作记录快捷键

案例: 自定义组合键操作 ​

例 21_qkeysequenceedit 自定义快捷键(难度:简单),通常 KeySequenceEdit 控件记录快捷键后与 Qt 键盘事件搭配来使用,由于教程后面才说到事件,所以先不与 Qt 键盘事件搭配使用。下面使用一个 QKeySequenceEdit 控件,然后判断输入的组合键是否为 Ctrl + Q,若是,则关闭窗口,退出程序,如果不是,则继续更新记录组合键。

当焦点在 KeySequenceEdit 里时 ,按下键盘里的任一键或者组合键 ,一秒后 ,KeySequenceEdit 将记录了这个/这组组合键,并打印在输出信息里。直到程序按下 Ctrl + Q 组合键后,程序窗口才关闭,结束。

cpp
#include "mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    /* 主窗体设置位置与大小 */
    this->setGeometry(0, 0, 800, 480);

    /* 实例化 */
    keySequenceEdit = new QKeySequenceEdit(this);

    /* 设置位置与大小 */
    keySequenceEdit->setGeometry(350, 200, 150, 30);

    /* 信号槽连接 */
    connect(keySequenceEdit,
            SIGNAL(keySequenceChanged(const QKeySequence &)),
            this,
            SLOT(KSEKeySequenceChanged(const QKeySequence &))
            );
}

MainWindow::~MainWindow()
{
}

void MainWindow::KSEKeySequenceChanged(
        const QKeySequence &keySequence)
{
    /* 判断输入的组合键是否为Ctrl + Q,如果是则退出程序 */
    if(keySequence == QKeySequence(tr("Ctrl+Q"))) {
        /* 结束程序 */
        this->close();
    }else {
        /* 打印出按下的组合键 */
        qDebug()<<keySequence.toString()<<endl;
    }
}