QCheckComboBox使用
来源:互联网 发布:日本神户钢铁造假知乎 编辑:程序博客网 时间:2024/05/22 20:27
class QCheckComboBox : public QComboBox{Q_OBJECTpublic:QCheckComboBox(QWidget *parent = 0);~QCheckComboBox();void appendItem(const QString &text,bool bChecked);void hidePopup(); protected: void mousePressEvent(QMouseEvent *e);private: void updateIndexStatus(int index);signals: void checkedStateChange(int index, bool bChecked);};
实现文件:
QCheckComboBox::QCheckComboBox(QWidget *parent): QComboBox(parent){setMinimumSize(QSize(100, 27));setMaximumSize(QSize(16777215, 25));}void QCheckComboBox::appendItem( const QString &text,bool bChecked ){QIcon icon;if(bChecked)icon.addFile(QString::fromUtf8("./Resources/check.png"));elseicon.addFile(QString::fromUtf8("./Resources/uncheck.png"));addItem(icon,text,bChecked);}void QCheckComboBox::mousePressEvent( QMouseEvent *e ){int x= e->pos().x();int iconWidth= iconSize().width();if(x<= iconWidth){int index=currentIndex();updateIndexStatus(index);}else{QComboBox::mousePressEvent(e);}}void QCheckComboBox::updateIndexStatus( int index ){ ///previous statebool bChecked= itemData(index).toBool();if(bChecked) ///先前已经是选中状态{if(index==0) ///全选{for(int i=0; i<this->count(); i++){setItemIcon(i,QIcon(QString::fromUtf8("./Resources/uncheck.png")));setItemData(i,!bChecked);}}else setItemIcon(index, QIcon(QString::fromUtf8("./Resources/uncheck.png")));}else{if(index==0) {for(int i=0; i<this->count(); i++){setItemIcon(i,QIcon(QString::fromUtf8("./Resources/check.png")));setItemData(i,!bChecked);}}else setItemIcon(index, QIcon(QString::fromUtf8("./Resources/check.png")));}setItemData(index,!bChecked); //previous state取反int i;for(i=1; i<this->count(); i++){if(itemData(i).toBool()==false){setItemIcon(0, QIcon(QString::fromUtf8("./Resources/uncheck.png")));setItemData(0,false);break;}}if(i==this->count()){setItemIcon(0, QIcon(QString::fromUtf8("./Resources/check.png")));setItemData(0,true);}emit checkedStateChange(index,!bChecked);}void QCheckComboBox::hidePopup(){int iconW = iconSize().width(); int x = QCursor::pos().x() - mapToGlobal(geometry().topLeft()).x() + geometry().x(); int index = view()->selectionModel()->currentIndex().row(); if (x >= 0 && x <= iconW) { updateIndexStatus(index); } else { QComboBox::hidePopup(); }}示例如下:
void CCTest::checkChaged( int index,bool bChecked ){if(bChecked)qDebug()<<index<<" is checked";elseqDebug()<<index<<" is unchecked";QString strout;for(int i=0; i<ccbox->count(); i++){if(ccbox->itemData(i).toBool()==true)strout+=ccbox->itemText(i);}qDebug()<<strout;}
转:http://blog.csdn.net/rabinsong/article/details/9007283
- QCheckComboBox使用
- 使用
- 使用
- 使用
- 使用
- 使用
- 使用
- 使用++,--
- 使用$@ $!
- 使用
- SoftICE使用(指令使用)
- 使用GraphEdit使用
- 使用HtmlParser使用心得
- 时钟使用使用
- Ubuntu 使用Git 使用
- Ubuntu 使用Git 使用
- GUID使用的使用
- Git使用 tortoisegit使用
- DNN交互设计-综合使用界面模式
- DNN交互设计-CSS基础
- linux命令(2)
- Sublime Text 2实现Word Highlight
- spring @Scheduled(cron="0 0 2-7 * * ?")
- QCheckComboBox使用
- 算法导论CLRS-notes-0
- hibernate 多对多关联
- 潘石屹早年工友:26年后他成了总裁我还在挑砖
- 在Ubuntu12.04启用Eclipse的globalmenu全局菜单
- ListView的listSelector失效
- Oracle的Numer类型与C,C#数据类型对应关系
- ie11怎么降级
- LeetCode题解: Reverse Linked List II