Qt 控件之输入窗口部件
Qt Designer 窗口部件提供的面板中,提供了 16 种输入部件:
- Comb Box:组合框
- Font Comb Box:字体组合框
- Line Edit:单行编辑框
- Text Edit:文本编辑框
- Plain Text Edit:纯文本编辑框
- Spin Box:数字旋转框
- Double Spin Box:双精度数字旋转框
- Time Edit:时间编辑框
- Date Edit:日期编辑框
- Date/Time Edit:日期时间编辑框
- Dial:数字拨盘框
- Horizontal Scroll Bar:水平滚动条
- Vertical Scroll Bar:垂直滚动条
- Horizontal Slider:水平滑动条
- Vertical Slider:垂直滑动条
- Key sequence Edit:按键序列编辑框
下面将通过例子讲解每种输入窗口部件是如何使用,并能实现什么效果
1. QComboBox
QComboBox 类提供了 Qt 下拉组合框的组件。
以下实例实现的效果:通过点击下拉按钮的项,选择其中一项,然后打印出当前选择项的内容
- 创建新项目,注意不勾选 “Generate form”,默认继承 QMainWindow 类
- 头文件 “mainwindow.h” 中具体代码如下
/* 引入QComboBox */
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
/* 声明一个QComboBox对象 */
QComboBox *comboBox;
private slots:
/* 声明QComboBox对象的槽函数 */
void comboBoxIndexChanged(int);
};
// MAINWINDOW_H
- 源文件 “mainwindow.cpp” 中具体代码如下
/* 引入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;
}
- 源文件 “main.cpp” 代码,由新建项目时生成,无需改动
- 程序编译及运行后,当点击下拉选择框选择省份时,槽函数将打印出您选择的省份。
2. QFontComboBox
QFontComboBox 类提供了下拉选择字体系列的组合框小部件。
以下实例实现的效果:字体选择,通过点击下拉按钮的项,选择其中一项然后打印出当前选择项的内容
- 创建新项目,注意不勾选 “Generate form”,默认继承 QMainWindow 类
- 头文件 “mainwindow.h” 中具体代码如下
/* 引入QFontComboBox */
/* 引入QLable */
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
/* 声明一个QFontComboBox对象 */
QFontComboBox *fontComboBox;
/* 声明一个Label对象,用于显示当前字体变化 */
QLabel *label;
private slots:
/* 声明QFontComboBox对象使用的槽函数 */
void fontComboBoxFontChanged(QFont);
};
// MAINWINDOW_H
- 源文件 “mainwindow.cpp” 中具体代码如下
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);
}
- 源文件 “main.cpp” 代码,由新建项目时生成,无需改动
- 程序编译及运行后,当点击 FontCOmboBox 字体组合框选择字体后, Label 标签显示的字体将改变为当前所选择的字体
3. QTextEdit
QLineEdit 小部件是一个单行文本编辑器。
以下实例实现的效果:单行输入框 ,通过点击下拉按钮的项,选择其中一项,然
后打印出当前选择项的内容
- 创建新项目,注意不勾选 “Generate form”,默认继承 QMainWindow 类
- 头文件 “mainwindow.h” 中具体代码如下
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
/* 声明一个QLineEdit对象 */
QLineEdit *lineEdit;
/* 声明一个QPushButton对象 */
QPushButton *pushButton;
/* 声明一个QLabel对象 */
QLabel *label;
private slots:
/* 声明一个槽函数,响应pushButton的clicked事件 */
void pushButtonClicked();
};
// MAINWINDOW_H
- 源文件 “mainwindow.cpp” 中具体代码如下
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();
}
- 源文件 “main.cpp” 代码,由新建项目时生成,无需改动
- 程序编译及运行后,当在 QLineEdit 单行输入框内输入文本内容后,单击 QPushButton 确认按钮后, QLabel 的文本内容将显示所输入的内容
4. QTextEdit
QTextEdit 类提供了一个查看器 编辑器小部件。
以下实例实现的效果:演示文本的输入
- 创建新项目,注意不勾选 “Generate form”,默认继承 QMainWindow 类
- 头文件 “mainwindow.h” 中具体代码如下
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
/* 声明一个QTextEdit对象 */
QTextEdit *textEdit;
/* 声明两个QPushButton对象 */
QPushButton *pushButtonSelectAll;
QPushButton *pushButtonClearAll;
private slots:
/* 声明两个槽函数,响应按钮点击响应的事件 */
void pushButtonSelectAllClicked();
void pushButtonClearAllClicked();
};
// MAINWINDOW_H
- 源文件 “mainwindow.cpp” 中具体代码如下
- 源文件 “main.cpp” 代码,由新建项目时生成,无需改动
- 程序编译及运行后,在编辑框里输入文字后,点击按钮全选,点击清除则清除编辑框内的全部内容
5. QPlainTextEdit
QPlainTextEdit 类提供了一个用于编辑和显示纯文本的小部件,常用于显示多行文本或简单文本。
以下实例实现的效果:用一个 QPlainTextEdit 来读取本当前工程里的一个文件,并用一个 RadioButton 里将 QPlainTextEdit 设为只读
- 创建新项目,注意不勾选 “Generate form”,默认继承 QMainWindow 类
- 头文件 “mainwindow.h” 中具体代码如下
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
/* 声明对象 */
QPlainTextEdit *plainTextEdit;
QRadioButton *radioButton;
private slots:
/* 槽函数 */
void radioButtonClicked();
};
// MAINWINDOW_H
- 源文件 “mainwindow.cpp” 中具体代码如下
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);
}
}
- 源文件 “main.cpp” 代码,由新建项目时生成,无需改动
- 程序编译及运行后,在 QPlainTextEdit 编辑框下是可编辑的,当选中程序界面上的只读模式时, QPlainTextEdit 编辑框就不可以再编辑,相反也可取消只读模式再编辑
6. QSpinBox
QSpinBox 类提供了一个微调框小部件。
以下实例实现的效果:用一个 QSpinBox 来调节程序窗体的整体不透明度。
- 创建新项目,注意不勾选 “Generate form”,默认继承 QMainWindow 类
- 头文件 “mainwindow.h” 中具体代码如下
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
/* 声明一个QSpinBox对象 */
QSpinBox *spinBox;
private slots:
/* 槽函数 */
void spinBoxValueChanged(int);
};
// MAINWINDOW_H
- 源文件 “mainwindow.cpp” 中具体代码如下
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);
}
- 源文件 “main.cpp” 代码,由新建项目时生成,无需改动
- 程序编译及运行后,程序初始化界面时是全不透明,不透明度值为 100%,当不透明度的值变小时,窗口将透明化
7. QDoubleSpinBox
QDoubleSpinBox 类提供了一个用于处理浮点值微调框小部件。与 QSpinBox 作用基本一样,与 QSpinBox 不同的是, QDoubleSpinBox 类处理的是浮点值数据
以下实例实现的效果:用一个 QDoubleSpinBox 来调节程序窗口的整体大小
- 创建新项目,注意不勾选 “Generate form”,默认继承 QMainWindow 类
- 头文件 “mainwindow.h” 中具体代码如下
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
/* 声明一个QDoubleSpinBox对象 */
QDoubleSpinBox *doubleSpinBox;
private slots:
/* 槽函数 */
void doubleSpinBoxValueChanged(double);
};
// MAINWINDOW_H
- 源文件 “mainwindow.cpp” 中具体代码如下
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);
}
- 源文件 “main.cpp” 代码,由新建项目时生成,无需改动
- 程序编译及运行后,程序初始化界面窗口大小值为 100%,当点击向下调节 QDoubleSpinBox 时,整个窗体将按 QDoubleSpinBox 里数值的比例缩小,相反当点击向上调节 QDoubleSpinBox 时,窗口大小将整体变大
8. QTimeEdit
QTimeEdit 类提供一个基于 QDateTimeEdit 类编辑时间的小部件。实例见第10小节
9. QDateEdit
QDateEdit 类提供一个基于 QDateTimeEdit 类编辑时间的小部件。实例见第10小节
10. QDateTimeEdit
QDateTimeEdit 类提供了一个用于编辑日期和时间的小部件,允许用户使用键盘或箭头键编辑日期,以增加或减少日期和时间值
以下实例实现的效果:使用一个 QDateTimeEdit ,一个 QTimeEdit,以及一个 QDateEdit ,传入当前系统时间与日期,展示简单的日期时间控件使用方法
- 创建新项目,注意不勾选 “Generate form”,默认继承 QMainWindow 类
- 头文件 “mainwindow.h” 中具体代码如下
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
/* 声明对象 */
QDateTimeEdit *dateTimeEdit;
QTimeEdit *timeEdit;
QDateEdit *dateEdit;
};
// MAINWINDOW_H
- 源文件 “mainwindow.cpp” 中具体代码如下
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()
{
}
- 源文件 “main.cpp” 代码,由新建项目时生成,无需改动
- 程序编译及运行后,分别显示系统当前的时间与日期
11. QDial
QDial类提供了一个圆形范围控制。
以下实例实现的效果:车速表,使用一个 QDial ,以一个 QLabel ,演示 QDial 的用法,当程序初始化界面后,拖动滑块的位置, label 则会显示 dial 的值
- 创建新项目,注意不勾选 “Generate form”,默认继承 QMainWindow 类
- 头文件 “mainwindow.h” 中具体代码如下
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
/* 声明对象 */
QDial *dial;
QLabel *label;
private slots:
/* 槽函数 */
void dialValueChanged(int);
};
// MAINWINDOW_H
- 源文件 “mainwindow.cpp” 中具体代码如下
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");
}
- 源文件 “main.cpp” 代码,由新建项目时生成,无需改动
- 程序编译及运行后,当用鼠标拖动滑块或者按键盘的上下左右方向键时, label 则会显示当前“车速”
12. QScrollBar
QScrollBar 继承 QAbstractSlider ,提供垂直或水平滚动条,提供了用户在文档中的当前位置和可见文档数量的可视化指示。滚动条通常配有其他控件,可以实现更精确的导航 这里指浏览到精确的位置
以下实例实现的效果:创建水平和垂直滚动条(难度:简单)
- 创建新项目,注意不勾选 “Generate form”,默认继承 QMainWindow 类
- 头文件 “mainwindow.h” 中具体代码如下
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
/* 声明水平滚动条对象 */
QScrollBar *horizontalScrollBar;
/* 声明垂直滚动条对象 */
QScrollBar *verticalScrollBar;
/* 声明标签文本 */
QLabel *label;
};
// MAINWINDOW_H
- 源文件 “mainwindow.cpp” 中具体代码如下
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()
{
}
- 源文件 “main.cpp” 代码,由新建项目时生成,无需改动
- 程序编译及运行后,会显示水平和垂直滚动条
13. QSlider
QSlider 继承 QAbstractSlider ,提供垂直或水平滑动条小部件,滑动条是用于控制有界值的典型小部件。允许用户沿着水平或垂直凹槽移动滑块手柄,并将手柄的位置转换为合法范围内的整数值
以下实例实现的效果:创建水平和垂直滑动条
- 创建新项目,注意不勾选 “Generate form”,默认继承 QMainWindow 类
- 头文件 “mainwindow.h” 中具体代码如下
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
/* 声明对象 */
QSlider *horizontalSlider;
QSlider *verticalSlider;
QLabel *label;
private slots:
/* 槽函数 */
void horizontalSliderValueChanged(int);
void verticalSliderValueChanged(int);
};
// MAINWINDOW_H
- 源文件 “mainwindow.cpp” 中具体代码如下
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);
}
- 源文件 “main.cpp” 代码,由新建项目时生成,无需改动
- 程序编译及运行后,会显示水平和垂直滑动条
14. QKeySequenceEdit
QKeySequenceEdit 继承 QWidget ,该小部件允许用户选择 QKeySequence, 通常用作快捷方式。当小部件接收到焦点并在用户释放最后一个键后一秒结束时,将启动记录,常用作记录快捷键
以下实例实现的效果:自定义快捷键
- 创建新项目,注意不勾选 “Generate form”,默认继承 QMainWindow 类
- 头文件 “mainwindow.h” 中具体代码如下
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
/* 声明QKeySequenceEdit对象 */
QKeySequenceEdit *keySequenceEdit;
private slots:
/* 声明槽 */
void KSEKeySequenceChanged(const QKeySequence &);
};
// MAINWINDOW_H
- 源文件 “mainwindow.cpp” 中具体代码如下
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;
}
}
- 源文件 “main.cpp” 代码,由新建项目时生成,无需改动
- 程序编译及运行后,当焦点在 KeySequenceEdit 里时,按下键盘里的任一键或者组合键,一秒后,KeySequenceEdit 将记录了这个 这组组合键,并打印在输出信息里。直到程序按下Ctrl + Q 组合键后,程序窗口才关闭,结束