借助treeView和tableView演示MVC的使用
tableView和treeView可联动(互相控制)
委托:
1.
单元格可编辑(QLineEdit),可根据下拉列表选择显示内容(QComboBox)
重载createEditor创建编辑器
重载setModelData设置模型数据
重载setEditorData设置编辑器数据
#include "delegate_edit.h"
#include <QLineEdit>
#include <QComboBox>
#include "model.h"
Delegate_edit::Delegate_edit(QObject *parent) :
QStyledItemDelegate(parent)
{
this->m_style<<"qq"<<"fetion"<<"explorer"<<"dictionary"<<"unknown";
}
QWidget *Delegate_edit::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if(!index.isValid())return 0;
Q_UNUSED(option);
switch(index.column())
{
case 1:return new QLineEdit(parent);//创建编辑器
case 2:{QComboBox *comboBox = new QComboBox(parent);comboBox->addItems(this->m_style); return comboBox;}
default:return 0;
}
return 0;
}
void Delegate_edit::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
if(!index.isValid())return;
switch(index.column())
{
case 1:((Model*)model)->setData(index,((QLineEdit*)editor)->text(),Qt::EditRole);break;//创建编辑器,设置数据源
case 2:((Model*)model)->setData(index,((QComboBox*)editor)->currentText(),Qt::EditRole);break;
default:break;
}
}
void Delegate_edit::setEditorData(QWidget *editor, const QModelIndex &index) const
{
if(!index.isValid())return;
switch(index.column())
{
case 1:((QLineEdit*)editor)->setText(index.model()->data(index).toString());break;//创建编辑器,显示数据
case 2:((QComboBox*)editor)->setCurrentIndex(this->m_style.indexOf(index.model()->data(index).toString()));break;//注意QComboBox当前索引的计算
default:break;
}
}
2.
单元格显示进度条(重绘)
重载paint函数
重载displayText(