QListWidget的QComboBox下拉列表添加复选框及消息处理
要在QComboBox下拉列表项中添加复选框,并进行消息处理,在网上搜索了很久没有找到太多有用的信息和实际的例子,但从中还是找到了一些提示性的资料,根据这些简短的介绍,最终实现了这个功能。
QComboBox有一个setView的方法,因此,可以自定义的一个视图类,将复选框在视图中实现,本例自定义视图类继承于QListWidget,因为在该视图类中,有一个setItemWidget方法,可以直接将QCheckBox附加在QListWidgetItem项上。 具体看下面得的示例:
//QCombobox下拉列表添加QCheckBox复选框
class MyListView : public QListWidget
{
Q_OBJECT //自定义信号槽时需加上该宏,否则链接信号槽将会失败
public:
/*
columnlabels QCheckBox名称
data QListWidgetItem的用户自定义数据
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(来源:CSDN)
http://blog.csdn.net/styyzxjq2009/article/details/7975262
QListWidget的QComboBox下拉列表添加复选框及消息处理的更多相关文章
- 关于我们的Jquery操作下拉列表和复选框,自定义下拉
后半部分还有自定义下拉列表和开灯关灯的效果,可以进来来看一下 哦 如果网页有下拉列表和复选框,看一下Jquery怎么来操作他们,主要怎么来选取他们的数据,怎么设置某一项选中 先来看个下拉列表 < ...
- 组合框里添加复选框的方法(使用勾选的假象,用图片代替而已,并非QT原生支持)
组合框可以看作是列表框和文本框的组合,因其占据的空间少,使用操作方便,常被界面设计人员用于界面开发设计中,在有限个输入的条件下,组合框常用来代替文本框,这样从用户使用角度来看,更趋人性化,所见即所得. ...
- Jquery操作下拉列表和复选框,自定义下拉
后半部分还有自定义下拉列表和开灯关灯的效果,可以进来来看一下 哦 如果网页有下拉列表和复选框,看一下Jquery怎么来操作他们,主要怎么来选取他们的数据,怎么设置某一项选中 先来看个下拉列表 < ...
- Qt之QHeaderView添加复选框
简述 前面分享了QTableView中如何添加复选框.本节主要介绍QTableView中的表头-QHeaderView添加复选框的功能,下面以水平表头为例,垂直表头类似! 简述 效果 QHeaderV ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 添加复选框
jQuery EasyUI 数据网格 - 添加复选框 本实例演示如何放置一个复选框列到数据网格(DataGrid).通过复选框,用户将可以选择 选中/取消选中 网格行数据. 为了添加一个复选框列,我们 ...
- dojo:为数据表格添加复选框
一.添加复选框 此时应该选用EnhancedGrid,而不是普通的DataGrid.添加复选框需要设置EnhancedGrid的plugins属性,如下: gridLayout =[{ default ...
- DateGridView标题列头添加复选框
第一:添加列标题时,添加两个空格——用于显示复选框: 第二:实现列标题添加复选框,代码如下: private void AddCheckeBoxToDGVHeader(DataGridView dgv ...
- Jquery Datatable添加复选框,实现批量操作。
最近一段时间,一直在写前端的东西,自己也不擅长,最近也有所长进,把工作中用到的一些前端知识整理一下,下次用到就不用再找了.这次主要是在datatable中添加复选框,然后实现批量操作的功能.因为是公司 ...
- Js动态添加复选框Checkbox
Js动态添加复选框Checkbox的实例方法!!! 首先,使用JS动态产生Checkbox可以采用如下类似的语句: var checkBox=document.createElement(" ...
随机推荐
- BZOJ 1087 互不侵犯king
Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行,包 ...
- mac os vim 乱码
yum -y groupinstall chinese-support vim /etc/sysconfig/i18n LANG="zh_CN.UTF-8" LANGUAGE=&q ...
- python打包成.exe工具py2exe0-----No such file or directory错误
转自:http://justcoding.iteye.com/blog/900993 一.简介 py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具, ...
- PHP中计算时间差(上周,上月,去年,昨天等)
运用了date()和strtotime()函数,直接上代码 echo date('Y-m-d' , strtotime('-1 day')).PHP_EOL; echo date('Y-m-d' , ...
- PHP利用递归法获取多级类别的树状数组
数据结构:category(id, pid, name),对应:信息ID,父项ID,类别名 测试数据: $aryCate = array( array('id' => 1, 'pid' => ...
- ASP.NET页面跳转
总结一下跳转方式: <a>标签 <a href=”home.aspx”></a> HyperLink控件 Asp.net 服务器端控件 属性NavigateUrl指 ...
- Eric6 右键点击生产对话框代码报错
问题没有解决,属于菜鸟级别的孩子~~~~ 求助啊,求助!!!!!! 报告如下: Warning:An unhandled exception occurred. Please report the p ...
- Linux文件系统与结构
一.Linux文件系统结构 /bin 二进制的缩写,用来放置可执行的二进制程序,基本命令 /boot 用来存放启动文件,kernel 和boot配置文件 /dev 用来放置设备文件 /dev/cons ...
- gcc编译器对宽字符的识别
最早是使用VC++工具来学习C++,学的越多就越对VC挡住的我看不见的东西好奇,总想多接触一些开发环境,今日抽空摸索了一下CodeBlocks这个开源的IDE使用方法,配置的编译器是MinGW的gcc ...
- 一个好用的VC DBGRID[图]
本文示例源代码下载 CGridCtrl_demo19_01.zip为演示CGridCtrl的使用 CGridCtrl_demo19_02.zip演示与CMYODBC的配合使用 一.引言 在用vc开发关 ...