1、QListWidget+QListWidgetItem
实现QComboBox下拉框复选
ui->role_listWidget = new QListWidget();// 创建ListWidget
QListWidgetItem* pItem = new QListWidgetItem();// 增加listwidget的item
pItem->setText(); // 设置复选框文本
pItem->setCheckState(Qt::Unchecked);// 设置复选框状态为未选中
ui->role_listWidget->addItem(pItem);// 将item放入widget中
// 在下拉框中显示加入item
ui->role_comboBox->setModel(ui->role_listWidget->model());
ui->role_comboBox->setView(ui->role_listWidget);
// 设置下拉框内容为不可编辑
ui->role_comboBox->setEditable(true);
ui->role_comboBox->lineEdit()->setReadOnly(true);
// 设置下拉框点击事件
connect(ui->role_comboBox, SIGNAL(activated(int)), this, SLOT(activated(int)));
2、activate(int)
activated(int)
This signal is sent when the user chooses an item in the combobox. The item’s index is passed. Note that this signal is sent even when the choice is not changed.
翻译:当用户选择QComboBox中的Item时,将会产生一个选中Item序号值的消息信号,不管选项是够改变都会产生该消息。
使用activate(int)返回点击下拉框的索引
由于我需要做的有两个下拉框,需要通过QObject::sender来判断是哪个下拉框发送的信号来在显示在框中
QObject *object = QObject::sender();
QComboBox *current_combox = static_cast<QComboBox *>(object);// 获取发送信号的QComboBox
if(!current_combox->objectName().compare(ui->role_comboBox->objectName())){
ui->role_comboBox->lineEdit()->clear();//清空之前文本显示的内容
QListWidgetItem* item = ui->role_listWidget->item(index);
//更新当前点击对象的选中状态
if(item->checkState() == Qt::Unchecked)
item->setCheckState(Qt::Checked);
else if(item->checkState() == Qt::Checked)
item->setCheckState(Qt::Unchecked);
//循环获取所有选中状态的对象显示文字
QString text;
for(int row = 0, rows = ui->role_listWidget->count(); row < rows; ++row)
QListWidgetItem* item = ui->role_listWidget->item(row);
if(item->checkState() == Qt::Checked)