void MainWindow::init
{
m_workshopListWidget = new QListWidget(this);
m_workshopListWidget->setObjectName(QString("listWidget_wkshop"));
for(int i=0; i< m_workshopList.length(); i++)
{
QListWidgetItem *item = new QListWidgetItem();
m_workshopListWidget->addItem(item);
QCheckBox *chkBox = new QCheckBox();
chkBox->setText(m_workshopList.at(i));
m_workshopListWidget->setItemWidget(item, chkBox);
connect(chkBox,SIGNAL(stateChanged(int)),this,SLOT(slot_stateChanged()));
}
ui->cmbBox_workshop->setModel(m_workshopListWidget->model());
ui->cmbBox_workshop->setView(m_workshopListWidget);
ui->cmbBox_workshop->setEditable(true);
QLineEdit* lineEdit = ui->cmbBox_workshop->lineEdit();
lineEdit->setObjectName("LineEdit");
lineEdit->setText(QStringLiteral("选择车间"));
if(lineEdit)
{
lineEdit->setReadOnly(true);
}
}
slot_stateChanged()实现过程
void MainWindow::slot_stateChanged()
{
QString str ;
for ( int i= 0 ; i<m_workshopListWidget->count() ; i++ )
{
QListWidgetItem *item = m_workshopListWidget->item(i);
QCheckBox *box = (QCheckBox*)m_workshopListWidget->itemWidget(item);
if ( box->checkState() == Qt::Checked )
{
str += box->text();
str += ",";
}
}
str = str.mid(0,str.size()-1);
if(str == QString(""))
{
str = QStringLiteral("选择车间");
}
ui->cmbBox_workshop->lineEdit()->setText(str);
}
注意同一个QComboBox对象的setModel()和SetView()只能调用一次,如果下拉列表数据有变动时,修改QListWidgetItem,而不能重新setModel()和SetView()。另外实验中发现下拉列表容易重复点击后容易出现错乱和空白条目,不知道是为什么,也可能是使用QListWidgetItem的问题吧