Model/View(模型/视图)结构
文章目录
简介
模型视图结构是Qt中用界面组件显示与编辑数据的一种结构,视图是显示和编辑数据的界面组件,模型是视图与原始数据之间的接口
视图组件
- QListView 用于显示单列的列表数据,使用于一维数据的操作
void Widget::initListModel()
{
listMod = new QStandardItemModel; // 创建模型
ui->listView->setModel(listMod); // 视图设置模型
// 增加
listMod->appendRow(new QStandardItem("item1")); // 往模型里插入数据
for (int i = 2; i < 10; i++)
listMod->appendRow(new QStandardItem(QString("item%1").arg(i)));
listMod->insertRow(2, new QStandardItem("insert item")); // 在第二行插入新的数据
// 删除
listMod->removeRows(2, 1); // 从第二行开始删除1个,不包括第二行
listMod->removeRow(8); // 删除第九行
listMod->takeRow(0); // 移除第一行,内存还在,没被释放
// 查找
QList<QStandardItem*> findItem = listMod->findItems("item5"); // 查找叫做item5的行,返回所有找到的行list
if (findItem.isEmpty())
qDebug() << "没找到";
else
for (auto& find : findItem)
qDebug() << find->text();
QStandardItem* findItem2 = listMod->item(3, 0); // 查找第三行,第0列的元素
if (findItem2)
qDebug() << findItem2->text();
findItem2->setEditable(false); // 设置不可编辑,双击没反应
findItem2->setEnabled(false); // 设置不启用,变成灰色
findItem2->setData(QString("display item"), Qt::DisplayRole);
// 在第五行插入一个元素
QMap<int, QVariant> map;
map.insert(Qt::DisplayRole, QString("display"));
map.insert(Qt::DecorationRole, QColor(0, 0, 255));
map.insert(Qt::ToolTipRole, QString("tool tip"));
auto it = listMod->item(5);
qDebug() << map;
listMod->setItemData(it->index(), map);
// 自定义数据或角色
findItem2->setData(QString("这是自定义角色"), Qt::UserRole + 1);
qDebug() << findItem2->data(Qt::UserRole + 1);
// 清除角色
findItem2->clearData();
}
- QTreeView 用于显示树状结构的数据
void Widget::initTreeModel()
{
treeMod = new QStandardItemModel;
ui->treeView->setModel(treeMod);
treeMod->appendRow(new QStandardItem("item1"));
treeMod->insertRow(1); // 在第一行插入一个空白行
QStandardItem* root1 = new QStandardItem("root1");
QStandardItem* root2 = new QStandardItem