您的位置 首页 > 数码极客

qcombobox如何处理选中事件

1、接着上一讲的软件项目,修改方法void Form2::addCellWidget(int row)的代码如下:

void Form2::addCellWidget(int row) { QComboBox* myCobBox = new QComboBox(); myCobBox->setObjectName(QString::number(row)); connect(myCobBox,SIGNAL(currentIndexChanged(QString)),this,SLOT(comboBoxSlot(QString))); myCobBox->addItem(""); myCobBox->addItem("first"); myCobBox->addItem("two"); myCobBox->addItem("three"); ui->tableWidget->setCellWidget(row,3,myCobBox); QCheckBox *myCheckBox = new QcheckBox(); myCheckBox->setObjectName(QString::number(row)); connect(myCheckBox,SIGNAL(stateChanged(int)),this,SLOT(checkboxSlot(int))); ui->tableWidget->setCellWidget(row,4,myCheckBox); }

在该方法中, QComboBox是我们动态生成的,不能在Form2.ui界面设计中直接右键→“go to slot”选择一个信号自动生成鼠标响应槽函数,我们可以用connect(myCobBox,SIGNAL(currentIndexChanged(QString)),this,SLOT(comboBoxSlot(QString)));自定义一个槽函数 comboBoxSlot,至于 SIGNAL有哪些,可以光标选中 QComboBox,按下F1按键,打开帮助文档,查看QComboBox有哪些信号,这里我们用了currentIndexChanged(QString)信号, QCheckBox的槽函数同样的方法定义了 checkboxSlot;

2、 comboBoxSlot槽函数完成QComboBox的鼠标响应,并把下拉框选择结果赋给表格 tableWidget的这个单元中,代码如下:

void Form2::comboBoxSlot(QString text) { QComboBox *comb = qobject_cast<QComboBox*>(sender()); int row = comb->objectName().toInt(); ui->tableWidget->item(row,3)->setText(text); }

这里要注意的是,如何知道是哪一行的 QComboBox被鼠标点击了呢?我们通过QComboBox *comb = qobject_cast<QComboBox*>(sender());可以得到鼠标点击后发送信号的QComboBox是哪一个,同时,在我们动态创建这个QComboBox,已经把它属于哪一行的信息通过代码myCobBox->setObjectName(QString::number(row))赋给了这个对象的名称,所以这个QComboBox的行号就得到了;

3、 checkboxSlot槽函数完成 QCheckBox的鼠标响应,当表格的该行被选中时,该行数据保存到一个链表中,代码如下:

void Form2::checkboxSlot(int state) { QCheckBox *check = qobject_cast<QCheckBox*>(sender()); int row = check->objectName().toInt(); if(state==2) { mDa = ui->tableWidget->item(row,0)->text().toInt(); mDa = ui->tableWidget->item(row,1)->text().toInt(); mDa = ui->tableWidget->item(row,2)->text(); mDa = ui->tableWidget->item(row,3)->text();; mDa = state; mda(mData); } }

定位是哪行的 QCheckBox响应了鼠标点击与步骤2同理;

实例过程和效果如视频所示:


责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“qcombobox如何处理选中事件”边界阅读