QT ComboBox

本文详细介绍了QT库中ComboBox组件的基本函数和信号槽的使用方法,包括如何添加、删除选项以及响应用户选择事件等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本函数

cbox = new QComboBox(groupBox);
cbox->setObjectName("cbox_Simple");//创建一个comboBox并命名

QIcon ico("XX.ico");
cbox->addItem(icon,"text",QVariant(val));//添加一个item到cbox中
//每个item实际上有两部分,一个是显示在UI上的text,一个是其内部含有的QVariant变量(内部data)
QStringList strList;
strList<<"北京"<<"上海"<<"天津"<<"河北省"<<"山东省"<<"山西省";
cbox->addItems(strList);//一次性添加多个item,但不能传递data

ui->cbox_Simple->currentText();//获取当前item的text
ui->cbox_Simple->currentIndex();//获取当前item的index
ui->cbox_Simple->itemIcon(ui->cbox_Simple->currentIndex());//获取指定index的icon

//插入和删除都会影响到其他item的index!
//插入到当前index位置上(作为第n个),还可以附加data
ui->cbox_Simple->insertItem(ui->cbox_Simple->currentIndex(),"new",data);
//remove时通过index来删除
for(int i=0;i<10;i++)
    ui->cbox_Simple->removeItem(0);//每次都删除第一个(第二个就变成第一个了)

//currentItem就是cbox当前所显示的item
ui->cbox_Simple->setCurrentText("XX")//设置当前item为text为XX的item,若没有,则append到cbox中
//其实并不是set当前item的text,而是通过text找到对应的item,再切换到相应的item
//使用此set时cbox必须是editable的,不然没效(然而若set的是已有的text则会正常切换到相应的item)
ui->cbox_Simple->setCurrentIndex(3)//设置当前item为对应index的item(与数组一样)

edit骗局:comboBox的lineEdit
其实不是直接更改item的text,而是只能在当前item处输入,若输入的text有对应的,那么就切换到对应的item,
若没有则直接append一个新的到cbox中(相当于可视化的setText)

current的骗局:currentIndex和currentText
对于get,它们俩就是获取当前item的index或text罢了
对于set,它们俩就是两种不同的查找方法罢了(一个通过索引一个通过text来查找对应的item),然后设置当前item
为查找到的item
对于changed信号,可以理解为只有一个currentItemChanged信号,但是有两个不同参数的版本,分别是:
void currentItemChanged(const int& index)void currentItemChanged(const QString& str)

若真要更改item,则使用
cbox->setItemData/setItemText(index,...)//根据索引修改相应item的data或text

信号槽

//当currentIndex改变时触发(setcurrentIndex或手动切换时)
void Combo::on_cbox_City_currentIndexChanged(const int& index)
{
	QString str=ui->cbox_City->itemText(index)//使用改变后的index
}
//当currentText改变时触发(set或手动切换时触发)
//注意settext时若当前item的text等于set的text,那么不会触发此信号(详见setText原理)
//edit时也会触发此信号,且每输入一个字符都会触发
void Combo::on_cbox_City_currentTextChanged(const QString &arg1)
{
    //一般都通过data取出item中对应的数据(非text,text只是表面显示的文本)
    QString str=ui->cbox_City->currentData().toString();
    ui->Text->appendPlainText(arg1+" Zone:"+str);//使用改变后的text
}
//当cbox是editable时,并且对item的lineEdit进行编辑时触发(即更改item的text)
//要注意的是必须是手动编辑lineEdit,若是某代码修改的(如setCurrentText)则不会触发此信号
void Combo::on_cbox_City_editTextChanged(const QString &arg1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值