[原博客地址:]https://blog.csdn.net/lutao614/article/details/80859968
模型/视图将数据和显示分开进行处理,中间通过代理做桥梁。
如果想往QCombox中添加一些子项,你会怎么做呢?除了常用的addItem方法,下面介绍通过模型/视图的方式添加,逐步理解模型/视图的使用方法。
1.首先添加一个类,继承自QAbstractListModel
-
class ComboxModel :
public QAbstractListModel
-
{
-
Q_OBJECT
-
public:
-
ComboxModel(QStringList &_list,QObject *parent =
0);
-
~ComboxModel();
-
//QAbstractListModel 中3个必须重新实现的虚函数
-
int rowCount(const QModelIndex & parent = QModelIndex()) const;
-
int columnCount(const QModelIndex & parent = QModelIndex()) const;
-
QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
-
-
private:
-
QStringList
list;
-
-
};
2.方法实现
-
//将QStringList中的字符串显示在combox中。
-
ComboxModel::ComboxModel(QStringList &_list,QObject *parent) :
list(_list),QAbstractListModel(parent)
-
{
-
}
-
-
ComboxModel::~ComboxModel()
-
{
-
}
-
-
//体现model的行数,这里就是list的个数
-
int ComboxModel::rowCount(
const QModelIndex & parent)
const
-
{
-
return
list.count();
-
}
-
-
//体现model的列数,这里只有1列
-
int ComboxModel::columnCount(
const QModelIndex & parent)
const
-
{
-
return
1;
-
}
-
-
//体现model中显示的数据,这里只是list中每一个子项。
-
QVariant ComboxModel::data(
const QModelIndex & index,
int role)
const
-
{
-
if (Qt::DisplayRole == role)
-
{
-
return
list.at(index.row());
//返回list每一项
-
}
-
return QVariant::Invalid;
-
}
3.界面上的combox与model进行关联。
-
Widget::Widget(QWidget *parent)
-
: QWidget(parent)
-
{
-
this->resize(
200,
200);
-
-
QComboBox *combox =
new QComboBox(
this);
-
combox->setGeometry(
50,
50,
100,
40);
-
-
QStringList
list;
-
list<<“123”<<“345”<<“546”<<“apple”;
-
//创建model并初始化它。
-
ComboxModel *model =
new ComboxModel(
list);
-
-
combox->setModel(model);
-
}
4.最后效果