QT中使用QComboBox代理

1.实现代理类 

头文件

#include <QComboBox>
#include <qDebug>
#include <QApplication>
#include <QMouseEvent>

  1).h文件

   

class c_ComboItem : public QStyledItemDelegate
 {
     Q_OBJECT

 public:
	 c_ComboItem( QObject *parent = 0,  QStringList list = QStringList() << "", bool editable = false, QString mask = "");
     QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
                           const QModelIndex &index) const;

     void setEditorData(QWidget *editor, const QModelIndex &index) const;
     void setModelData(QWidget *editor, QAbstractItemModel *model,
                       const QModelIndex &index) const;

     void updateEditorGeometry(QWidget *editor,
         const QStyleOptionViewItem &option, const QModelIndex &index) const;

 private:
	 QStringList m_qlist;
	 bool m_bEdit;
	 QString m_qszMask;

 signals:
	 void comboxChanged(const QString & para);


public slots:
	void OnComboBoxChanged(const QString & para) 
	{
		emit comboxChanged(para);
	}

 public:
	mutable QWidget *m_pEditor;

 };

 2).cpp文件

       

c_ComboItem::c_ComboItem( QObject *parent, const QStringList list/* = QStringList() << ""*/, bool editable/* = false*/, QString mask/* = ""*/)
     : QStyledItemDelegate(parent)
 {
	 m_qlist = list;
	 m_bEdit = editable;
	 m_qszMask = mask;
	// m_pEditor = NULL;
 }

QWidget *c_ComboItem::createEditor(QWidget *parent,
     const QStyleOptionViewItem &/* option */,
     const QModelIndex &index ) const
 {	  
	 QComboBox *editor = new QComboBox(parent);
	 editor->insertItems(0, m_qlist);
	 //editor->setCurrentIndex(0);
	 //editor->setCurrentItem(m_qlist.findIndex(m_qlist[0]));
	 m_pEditor = editor;
	 connect(m_pEditor, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(OnComboBoxChanged(const QString &)));
	 return editor;   
 }

void c_ComboItem::setEditorData(QWidget *editor,
                                     const QModelIndex &index) const
 {
	 QString value = index.model()->data(index, Qt::EditRole).toString();
     QComboBox *comboBox = static_cast<QComboBox*>(editor);
	 comboBox->setEditable(m_bEdit);
	 if ( m_qszMask != "" )
	 {
		 QValidator* validator = new QRegExpValidator( QRegExp(m_qszMask), 0);
		 comboBox->setValidator(validator);
	 }
	 if(m_qlist.indexOf(value) == -1) return; //确保不删除列表中不存在的数据
	 comboBox->setCurrentIndex(m_qlist.indexOf(value));
	 
 }

void c_ComboItem::setModelData(QWidget *editor, QAbstractItemModel *model,
                                    const QModelIndex &index) const
 {
	 QComboBox *comboBox = static_cast<QComboBox*>(editor);
	 comboBox->setEditable(m_bEdit);
	 QString value = comboBox->currentText();
	 model->setData(index, value);
 }
void c_ComboItem::updateEditorGeometry(QWidget *editor,
     const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
 {
     editor->setGeometry(option.rect);
 }

2.运用代理

//@begin 对新增列进行comobox代理。
QStringList stringListTmp;
stringListTmp << StrToQStr("")
		<< StrToQStr("测试A") 
        << StrToQStr("测试B")
		<< StrToQStr("测试C") 
        << StrToQStr("测试D");
cboitemTmp = new c_ComboItem(this, stringListTmp);
m_treewidget->setItemDelegateForColumn(COLUMN_IED_TYPE, cboitemTmp);	
//@end

connect(cboitemTmp, SIGNAL(comboxChanged(const QString &)), this, SLOT(OnComboBoxCurrentChanged(const QString &)));//响应combox值发生变化。

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值