Combo Box
QComboBox 表⽰下拉框
核⼼属性
属性 | 说明 |
---|---|
currentText | 当前选中的⽂本 |
currentIndex | 当前选中的条⽬下标. 从0开始计算.如果当前没有条⽬被选中,值为-1 |
editable | 是否允许修改 设为true时, QComboBox 的⾏为就⾮常接近 QLineEdit ,也可以 设置 validator |
iconSize | 下拉框图标(⼩三⻆)的⼤⼩ |
maxCount | 最多允许有多少个条⽬ |
核⼼⽅法
⽅法 | 说明 |
---|---|
addItem(const QString&) | 添加⼀个条⽬ |
currentIndex() | 获取当前条⽬的下标 从0开始计算.如果当前没有条⽬被选中,值为-1 |
currentText() | 获取当前条⽬的⽂本内容. |
核⼼信号
方法 | 说明 |
---|---|
activated(int) activated(const QString& text) | 当⽤⼾选择了⼀个选项时发出. 这个时候相当于⽤⼾点开下拉框,并且⿏标划过某个选项. 此时还没有确认做出选择. |
currentIndexChanged(int) currentIndexChanged(const QString & text) | 当前选项改变时发出. 此时⽤⼾已经明确的选择了⼀个选项. ⽤⼾操作或者通过程序操作都会触发这个信号. |
editTextChanged(const QString & text) | 当编辑框中的⽂本改变时发出 (editable为true时有效 |
代码⽰例:使⽤下拉框模拟⻨当劳点餐
1)在界⾯上创建三个下拉框,和⼀个按钮.
2)编写widget.cpp,初始化三个下拉框的内容
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->comboBox->addItem("麦辣鸡腿堡");
ui->comboBox->addItem("巨无霸");
ui->comboBox->addItem("培根蔬脆双层牛堡");
ui->comboBox_2->addItem("中薯条");
ui->comboBox_2->addItem("麦乐鸡翅");
ui->comboBox_2->addItem("麦乐鸡块");
ui->comboBox_3->addItem("可乐");
ui->comboBox_3->addItem("雪碧");
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
qDebug() << ui->comboBox->currentText() << ", " << ui->comboBox_2->currentText() << ", " << ui->comboBox_3->currentText();
}
也可以在图形界面,右键添加项目
代码⽰例:从⽂件中加载下拉框的选项
很多时候下拉框的选项并⾮是固定的,⽽是通过读取⽂件/读取⽹络获取到的
1)在界⾯上创建⼀个下拉框
2)创建⽂件config.txt ,编写选项.每个选项占⼀⾏.
3)修改widget.cpp,从⽂件中读取选项.
- 使⽤ ifstream 打开⽂件
- 使⽤ getline 读取每⼀⾏
- 使⽤ QString::fromStdString 把 std::string 转成 QString
#include "widget.h"
#include "ui_widget.h"
#include <fstream>
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//读取文件内容,把文件中的每一行读取出来,作为选项
std::ifstream file("F:/Qt/QT Work/qcombobox1/config.txt");
if (!file.is_open()) {
qDebug() << "文件打开失败";
return;
}
//按行读取文本内容getline
std::string line;
while (std::getline(file, line)) {
//取到的内容都设置到下拉框中
ui->comboBox->addItem(QString::fromStdString(line));
}
file.close();
}
Widget::~Widget()
{
delete ui;
}
Qt中也提供了QFile实现读写⽂件的功能.当然使⽤C++标准库的std::fstream也是完全可以的.
之所以存在两套,是因为Qt诞⽣较早(1991年左右),此时C++还没有完成"标准化"的⼯作,C++标准库这样的概念⾃然也没有诞⽣.
因此Qt就⾃⼰打造了⼀套库,实现了字符串,容器,⽂件操作,多线程,⽹络操作,定时器,正则表达式等内容.(由于C++标准委员会的不作为,⾄今仍然有些Qt提供的功能,是标准库不具备的)
Spin Box
使⽤ QSpinBox 或者 QDoubleSpinBox 表⽰"微调框",它是带有按钮的输⼊框.可以⽤来输⼊整数/浮点数.通过点击按钮来修改数值⼤⼩.
由于 SpinBox 和 QDoubleSpinBox ⽤法基本相同,就只介绍 SpinBox 的使⽤了.
关键属性
属性 | 说明 |
---|---|
value | 存储的数值. |
singleStep | 每次调整的"步⻓".按下⼀次按钮数据变化多少. |
displayInteger | 数字的进制.例如displayInteger设为10,则是按照10进制表⽰.设为2则为2进制表⽰. |
minimum | 最⼩值 |
maximum | 最⼤值 |
suffix | 后缀 |
prefix | 前缀 |
wrapping | 是否允许换⾏ |
frame | 是否带边框 |
alignment | ⽂字对⻬⽅式. |
readOnly | 是否允许修改 |
buttonSymbol | 按钮上的图标. • UpDownArrows 上下箭头形式 • PlusMinus 加减号形式 • NoButtons 没有按钮 |
accelerated(加速的) | 按下按钮时是否为快速调整模式 |
correctionMode | 输⼊有误时如何修正. • QAbstractSpinBox::CorrectToPreviousValue :如果⽤⼾输⼊了⼀个 ⽆效的值(例如,在只能显⽰正整数的SpinBox中输⼊了负数),那么 SpinBox会恢复为上⼀个有效值。例如,如果SpinBox的初始值是1,⽤⼾输⼊了-1(⽆效),然后SpinBox会恢复为1。 • QAbstractSpinBox::CorrectToNearestValue :如果⽤⼾输⼊了⼀个 ⽆效的值,SpinBox会恢复为最接近的有效值。例如,如果SpinBox的初始值是1,⽤⼾输⼊了-1(⽆效),那么SpinBox会恢复为0。 |
keyboardTrack | 是否开启键盘跟踪. 设为true,每次在输⼊框输⼊⼀个数字,都会触发⼀次valueChanged()和 textChanged()信号. 设为false,只有在最终按下enter或者输⼊框失去焦点,才会触发 valueChanged()和textChanged()信号. |
核⼼信号 |
信号 | 说明 |
---|---|
textChanged(QString) | 微调框的⽂本发⽣改变时会触发. 参数QString带有前缀和后缀. |
valueChanged(int) | 微调框的⽂本发⽣改变时会触发. 参数int,表⽰当前的数值. |
代码⽰例:调整⻨当劳购物⻋中的份数
1)在界⾯上创建下列内容
- 三个下拉框: objectName 为 comboBox 到 comboBox_3
- 三个微调框: objectName 为 spinBox 到 spinBox_3
- ⼀个按钮: objectName 为 pushButton
2)编写代码,修改widget.cpp,给下拉框设置初始值.
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//初始化下拉菜单
ui->comboBox->addItem("麦辣鸡腿堡");
ui->comboBox->addItem("巨无霸");
ui->comboBox->addItem("培根蔬脆双层牛堡");
ui->comboBox_2->addItem("中薯条");
ui->comboBox_2->addItem("麦乐鸡翅");
ui->comboBox_2->addItem("麦乐鸡块");
ui->comboBox_3->addItem("可乐");
ui->comboBox_3->addItem("雪碧");
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
qDebug() << "当前下单的内容: "
<< ui->comboBox->currentText() << ": " << ui->spinBox->value()
<< ui->comboBox_2->currentText() << ": " << ui->spinBox_2->value()
<< ui->comboBox_3->currentText() << ": " << ui->spinBox_3->value();
}
4)执⾏程序,可以看到当⽤⼾选择不同的内容时,点击按钮就能获取到对应的结果
//针对QSpinBox的范围进行设置
ui->spinBox->setRange(1, 5);
ui->spinBox_2->setRange(1, 5);
ui->spinBox_3->setRange(1, 5);
ui->spinBox->setValue(1);
ui->spinBox_2->setValue(1);
ui->spinBox_3->setValue(1);