1.组合框: QComboBox
组合框:QComboBox
用于存放一些列表项
实例化
//实例化
QComboBox* comboBox = new QComboBox(this);
1.1 代码实现
1.1.1 组合框的基本函数
QComboBox
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
//添加列表项
this->comboBox->addItem("苹果");
this->comboBox->addItem("香蕉");
this->comboBox->addItem("西瓜");
//添加图片
this->comboBox->addItem(QIcon(":/img/photo.jpg"),"葡萄");
//一次添加多个列表项
QStringList list;
list<<"星期一"<<"星期二"<<"星期三";
this->comboBox->addItems(list);
//返回组合框里有多少列表项
qDebug()<<"组合框里列表项数目"<<this->comboBox->count()<<endl;
//返回当前列表项的下标
qDebug()<<"返回当前列表项的下标"<<this->comboBox->currentIndex()<<endl;
//返回当前列表项
qDebug()<<"返回当前列表项"<<this->comboBox->currentText()<<endl;
//在组合框中查询是否有指定的列表项,如果有就返回下标,没有就返回-1
int index = this->comboBox->findText("星期二");
qDebug()<<"星期二对应的下标:"<<index<<endl;
//通过下标找到列表项
QString text = this->comboBox->itemText(index);
qDebug()<<"下标为"<<index<<"的列表项是"<<text<<endl;
//通过下标找到图片
QIcon icon = this->comboBox->itemIcon(2);
//在指定位置插入列表项
QStringList list2;
list2<<"昨天"<<"今天"<<"明天";
this->comboBox->insertItems(1,list2);
//移除指定的列表项
this->comboBox->removeItem(1);//这里我移除了 昨天
//将列表项更新为新的列表项
this->comboBox->setItemText(index,"hello");
}
Dialog::~Dialog()
{
delete ui;
}
1.1.2 练习购物车
用组合框模拟账户的存储与取出
使用组合框模拟购物车
(1)用户可以添加物品到购物车中
(2)用户可以移除购物车中指定的物品
(3)用户可以清空并结算购物车中商品总价
(4)用户一个商品用户可以购买多个
效果如下
QConboBox_gouwuche
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <Qdebug>
#include <QComboBox>
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private slots:
void on_xigau_clicked();
void on_car_clicked();
void on_flower_clicked();
void on_del_clicked();
void on_jiesuan_clicked();
private:
Ui::Dialog *ui;
//实例化组合框
QComboBox* comboBox = new QComboBox(this);
};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
//用组合框模拟账户的存储与取出
// 使用组合框模拟购物车
// (1)用户可以添加物品到购物车中
// (2)用户可以移除购物车中指定的物品
// (3)用户可以清空并结算购物车中商品总价
// (4)用户一个商品用户可以购买多个
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
this->comboBox->move(260,150);
this->comboBox->resize(100,40);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::on_xigau_clicked()//西瓜
{
QString xg = ui->xigau->text();
QStringList watermelon = xg.split(" ");//以空格分割字符串
this->comboBox->addItem(watermelon[0]);//将物品给组合框选项
}
void Dialog::on_car_clicked()//汽车
{
QString qiche = ui->car->text();
QStringList che = qiche.split(" ");//以空格分割字符串
this->comboBox->addItem(che[0]);
}
void Dialog::on_flower_clicked()//鲜花
{
QString xianhua = ui->flower->text();
QStringList hua = xianhua.split(" ");//以空格分割字符串
this->comboBox->addItem(hua[0]);
}
void Dialog::on_del_clicked()//删除列表项
{
int index = this->comboBox->currentIndex();
this->comboBox->removeItem(index);
}
void Dialog::on_jiesuan_clicked()//结算
{
int sum = 0;
int num = this->comboBox->count();//获取标签中有多少项
for(int i=0;i<num;i++){//循环遍历出列表项
QString cur = this->comboBox->itemText(i);//取出列表项
if(cur=="西瓜"){
sum+=12;
}else if(cur=="汽车"){
sum+=25;
}else if(cur=="鲜花"){
sum+=9;
}
}
ui->label->setText(QString::number(sum));//QString::number(sum)转为字符串
comboBox->clear();
}
1.2 信号
1.2.1 信号函数
void activated(int index) //当列表项变化时触发该信号
void activated(const QString &text)
void currentIndexChanged(int index) //当前列表项下标变化时触发该信号
void currentIndexChanged(const QString &text)
void currentTextChanged(const QString &text)//当前列表项变化时触发该信号
void editTextChanged(const QString &text)
void highlighted(int index) //列表项高亮时触发该信号
void highlighted(const QString &text)
1.2.2 举例
QComboBox
绑定
dialog.cpp
//绑定变化列表项信号,即当列表项被选中触发
connect(this->comboBox,SIGNAL(activated(QString)),this,SLOT(rece1_Text(QString)));
//绑定高亮信号,即鼠标放在哪高亮触发
connect(this->comboBox,SIGNAL(highlighted(int)),this,SLOT(rece2_Text_Index(int)));
槽
定义
dialog.h
public slots://槽
void rece1_Text(const QString& text);//绑定变化列表项信号,即当列表项被选中触发
void rece2_Text_Index(int dex);//绑定高亮信号,即鼠标放在哪高亮触发
实现
dialog.cpp
void Dialog::rece1_Text(const QString &text){
qDebug()<<"列表项"<<text<<endl;
}
void Dialog::rece2_Text_Index(int dex){
qDebug()<<"下表为"<<dex<<endl;
}
1.3 UI实现
方法解释
editable:设置组框当前列表项是否可编辑
currentText:获取组合框中的当前显示的列表项
currrenIdex:获取当前列表项的下标
maxVisibleItems:列表项可移动的最大数目
maxCount:设置组合框中最多能容纳的列表项的数目
insertPolicy:设置插入列表项的策略
sizeAdjustPolicy:设置组合框中列表项适应组合框
minimumContentsLength:最小的列表项的长度
iconsize:设置图片的大小
placeholderText:背景提示的文本
frame:边框
modelColumn:列表项