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

原创粉丝点击