Qt第十四章 模型视图

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yerennuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值