QComboBox下拉列表添加复选框及消息处理
2012-09-13 15:33
323 查看
要在QComboBox下拉列表项中添加复选框,并进行消息处理,在网上搜索了很久没有找到太多有用的信息和实际的例子,但从中还是找到了一些提示性的资料,根据这些简短的介绍,最终实现了这个功能。 QComboBox有一个setView的方法,因此,可以自定义的一个视图类,将复选框在视图中实现,本例自定义视图类继承于QListWidget,因为在该视图类中,有一个setItemWidget方法,可以直接将QCheckBox附加在QListWidgetItem项上。具体看下面得的示例: //QCombobox下拉列表添加QCheckBox复选框 classMyListView:publicQListWidget { Q_OBJECT//自定义信号槽时需加上该宏,否则链接信号槽将会失败 public: /* columnlabelsQCheckBox名称 dataQListWidgetItem的用户自定义数据 cmb添加列表项的QComboBox,此处主要用于及时的将用户选择的结果显示出来 */ MyListView(QWidget*parent=0,QStringList*columnlabels=NULL,QList<QVariant>*data=NULL,QComboBox*cmb=NULL) { setViewMode(QListWidget::ListMode); setSelectionMode(QAbstractItemView::SingleSelection); m_cmbox=cmb; for(inti=0;i<columnlabels->size();i++) { m_bchecked.append(false); m_data.append(data->at(i)); QListWidgetItem*item=newQListWidgetItem(); item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled); item->setData(Qt::UserRole+1,data->at(i)); insertItem(model()->rowCount(),item); QCheckBox*box=newQCheckBox(tr(columnlabels->at(i).toAscii().data())); setItemWidget(item,box); m_checklist.append(box); m_fslist.append(columnlabels->at(i)); //链接复选状态改变信号槽 intval=QObject::connect(box,SIGNAL(stateChanged(int)),this,SLOT(set_select_item(int))); qDebug()<<tr("链接checkbox消息:%1").arg(val); } } public: //返回用户选择项的用户自定义数据 voidget_select_data(QList<QVariant>&data) { for(inti=0;i<m_bchecked.size();i++) { if(m_bchecked.at(i)==true) data.append(m_data.at(i)); } } privateslots: //QCheckBox复选消息处理 voidset_select_item(intstate) { QCheckBox*box=qobject_cast<QCheckBox*>(sender()); for(intoff=0;off<m_checklist.size();off++) { if(box==m_checklist.at(off)) { m_bchecked[off]=(box->checkState()==Qt::Checked)?true:false; break; } } QStringstrfs; for(inti=0;i<m_bchecked.size();i++) { if(m_bchecked.at(i)==true) { strfs+=m_fslist.at(i); strfs+=","; } } qDebug()<<tr(strfs.toAscii().data()); m_cmbox->setEditText(strfs); } private: QComboBox*m_cmbox; QList<bool>m_bchecked; QList<QVariant>m_data; QList<QCheckBox*>m_checklist; QList<QString>m_fslist; }; 有了上述自定义视图后,接下来,就是需要QComboBox的setView,但根据Qt的帮助问题提示,在setView之前, 需要先将QComboBox的数据视图Model指向该View的Model,具体看代码。 QComboBox*cmb=newQComboBox(); MyListView*view=newMyListView(this,&strfs,&fstype,cmb); cmb->setModel(view->model());//设置Model cmb->setView(view);//设置视图 cmb->setEditable(true);//此处需要将QComboBox(来源:CSDN) |
相关文章推荐
- QListWidget的QComboBox下拉列表添加复选框及消息处理
- QComboBox下拉列表添加复选框及消息处理 .
- QComboBox下拉列表添加复选框及消息处理
- 在MFC中手动添加消息处理函数PreTranslateMessage
- php中表单提交复选框与下拉列表项
- DataGrid添加CheckBox(下拉列表)
- Aspose Cells 添加数据验证(动态下拉列表验证)
- Qt中QComboBox下拉列表(popup)位置与样式的控制
- datagrid列中添加下拉列表
- 在MFC中手动添加消息处理函数PreTranslateMessage和自定义消息
- MFC学习笔记——CDialog(为控件添加消息处理函数)
- 鸡啄米vc++2010系列46(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)
- 自动提示输入框,下拉列表和状态栏消息
- QComboBox下拉列表自动填充
- 如何在VC中添加消息处理函数
- 添加自定义消息处理
- [置顶] 单选框,复选框,下拉列表的美化
- 将数组中的数据添加到下拉列表中
- JEECG datagrid 列表检索条件 添加下拉级联功能
- 49.java编程思想——创建窗口和程序片 文本 复选框 单选框 下拉列表