QComboBox下拉列表添加复选框及消息处理 .
2013-07-04 20:44
274 查看
来源: /article/8081454.html
转载请务必注明出处及原始链接,谢谢!
要在QComboBox下拉列表项中添加复选框,并进行消息处理,在网上搜索了很久没有找到太多有用的信息和实际的例子,
但从中还是找到了一些提示性的资料,根据这些简短的介绍,最终实现了这个功能。
QComboBox有一个setView的方法,因此,可以自定义的一个视图类,将复选框在视图中实现,本例自定义视图类继承于QListWidget,
因为在该视图类中,有一个setItemWidget方法,可以直接将QCheckBox附加在QListWidgetItem项上。 具体看下面得的示例:
有了上述自定义视图后,接下来,就是需要QComboBox的setView,但根据Qt的帮助问题提示,在setView之前,
需要先将QComboBox的数据模型Model指向该View的Model,具体看代码。
转载请务必注明出处及原始链接,谢谢!
要在QComboBox下拉列表项中添加复选框,并进行消息处理,在网上搜索了很久没有找到太多有用的信息和实际的例子,
但从中还是找到了一些提示性的资料,根据这些简短的介绍,最终实现了这个功能。
QComboBox有一个setView的方法,因此,可以自定义的一个视图类,将复选框在视图中实现,本例自定义视图类继承于QListWidget,
因为在该视图类中,有一个setItemWidget方法,可以直接将QCheckBox附加在QListWidgetItem项上。 具体看下面得的示例:
//QCombobox下拉列表添加QCheckBox复选框
class MyListView : public QListWidget
{
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( int i=0; i<columnlabels->size(); i++ )
{
m_bchecked.append(false);
m_data.append(data->at(i));
QListWidgetItem *item = new QListWidgetItem();
item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);
item->setData(Qt::UserRole+1, data->at(i));
insertItem(model()->rowCount(), item);
QCheckBox* box = new QCheckBox(tr(columnlabels->at(i).toAscii().data()));
setItemWidget(item,box);
m_checklist.append(box);
m_fslist.append(columnlabels->at(i));
//链接复选状态改变信号槽
int val = QObject::connect(box, SIGNAL(stateChanged(int)), this, SLOT(set_select_item(int)));
qDebug() << tr("链接checkbox消息:%1").arg(val);
}
}
public:
//返回用户选择项的用户自定义数据
void get_select_data(QList<QVariant> &data)
{
for( int i=0; i<m_bchecked.size(); i++)
{
if( m_bchecked.at(i)== true)
data.append( m_data.at(i) );
}
}
private slots:
//QCheckBox复选消息处理
void set_select_item(int state)
{
QCheckBox*box = qobject_cast<QCheckBox*>(sender());
for( int off = 0;off<m_checklist.size(); off++)
{
if( box == m_checklist.at(off) )
{
m_bchecked[off] = (box->checkState() ==Qt::Checked) ? true : false;
break;
}
}
QString strfs;
for( int i=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 = new QComboBox();
MyListView *view = new MyListView(this, &strfs, &fstype, cmb);
cmb->setModel( view->model() );//设置Model
cmb->setView( view); //设置视图
cmb->setEditable(true);//此处需要将QComboBox的TextEdit设置为可编辑,以便选择结果的显示
相关文章推荐
- QListWidget的QComboBox下拉列表添加复选框及消息处理
- QComboBox下拉列表添加复选框及消息处理
- QComboBox下拉列表添加复选框及消息处理
- 在MFC中手动添加消息处理函数PreTranslateMessage
- php中表单提交复选框与下拉列表项
- DataGrid添加CheckBox(下拉列表)
- Aspose Cells 添加数据验证(动态下拉列表验证)
- Qt中QComboBox下拉列表(popup)位置与样式的控制
- datagrid列中添加下拉列表
- 在MFC中手动添加消息处理函数PreTranslateMessage和自定义消息
- MFC学习笔记——CDialog(为控件添加消息处理函数)
- 鸡啄米vc++2010系列46(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)
- 自动提示输入框,下拉列表和状态栏消息
- QComboBox下拉列表自动填充
- 添加自定义消息处理
- [置顶] 单选框,复选框,下拉列表的美化
- 将数组中的数据添加到下拉列表中
- JEECG datagrid 列表检索条件 添加下拉级联功能
- 将数组中的数据添加到下拉列表中option()
- 49.java编程思想——创建窗口和程序片 文本 复选框 单选框 下拉列表