Qt常用控件——QComboBox
文章目录
- 核心属性、方法、信号
- 模拟点餐
- 文件加载
核心属性、方法、信号
QComboBox
表示下拉框
核心属性:
属性 | 说明 |
---|---|
currentText | 当前选中文本 |
currentIndex | 当前选中的条目下标 |
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时有效) |
模拟点餐
#include "widget.h"
#include "ui_widget.h"
#include<QtDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->comboBox_stapleFood->addItem("米饭");
ui->comboBox_stapleFood->addItem("面条");
ui->comboBox_stapleFood->addItem("馒头");
ui->comboBox_stapleFood->addItem("大饼");
ui->comboBox_dishes->addItem("鱼香肉丝");
ui->comboBox_dishes->addItem("清炒时蔬");
ui->comboBox_dishes->addItem("辣子鸡");
ui->comboBox_dishes->addItem("回锅肉");
ui->comboBox_soup->addItem("老母鸡汤");
ui->comboBox_soup->addItem("西红柿鸡蛋汤");
ui->comboBox_soup->addItem("紫菜汤");
ui->comboBox_soup->addItem("排骨玉米汤");
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
qDebug() << ui->comboBox_stapleFood->currentText() << ", " << ui->comboBox_dishes->currentText() << ", " << ui->comboBox_soup->currentText();
}
也可以通过图形化界面的方式编辑下拉框内容:
文件加载
下拉框里面的内容,一般都不是写死的,而是从文件/网络当中加载获得,下面以文件加载作为示例。
准备config文件:
#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("C:/Users/panyu/Desktop/config.txt");
if(!file.is_open())
{
qDebug() << "open file error";
return;
}
//按行读取
std::string line;
while(std::getline(file, line))
{
//接受参数为QString 需要转换一下
//ui->comboBox->addItem(line);
ui->comboBox->addItem(QString::fromStdString(line));
}
}
Widget::~Widget()
{
delete ui;
}