【Qt】QStandardItemModel用法

发布于:2025-02-11 ⋅ 阅读:(63) ⋅ 点赞:(0)

QStandardItemModel 是 Qt 框架中一个非常强大的模型类,用于管理自定义的数据结构。它基于 QAbstractItemModel 类,并提供了可变的、分层的数据存储方式。以下是一些常见的用法示例和说明。

1. 创建和初始化 QStandardItemModel

首先,你需要创建一个 QStandardItemModel 的实例:

#include <QApplication>
#include <QStandardItemModel>
#include <QTableView>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QStandardItemModel model(4, 2); // 创建一个4行2列的模型

    return a.exec();
}

2. 设置数据

你可以使用 setItemappendRow 方法来设置和添加数据。

使用 setItem
QStandardItem *item1 = new QStandardItem("Item 1");
QStandardItem *item2 = new QStandardItem("Item 2");

model.setItem(0, 0, item1);
model.setItem(0, 1, item2);
使用 appendRow
QList<QStandardItem*> rowItems;
rowItems.append(new QStandardItem("Row 1 Col 1"));
rowItems.append(new QStandardItem("Row 1 Col 2"));

model.appendRow(rowItems);

3. 获取数据

你可以使用 item 方法来获取特定位置的 QStandardItem 对象,然后通过该对象获取其数据:

QStandardItem *item = model.item(0, 0);
if (item) {
    qDebug() << "Item at (0,0):" << item->text();
}

4. 连接视图

你可以将 QStandardItemModel 连接到一个视图(如 QTableViewQTreeView)来显示数据。

#include <QTableView>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QStandardItemModel model(4, 2);

    // 设置一些数据
    for (int row = 0; row < 4; ++row) {
        for (int column = 0; column < 2; ++column) {
            QString text = QString("Item %1-%2").arg(row + 1).arg(column + 1);
            model.setItem(row, column, new QStandardItem(text));
        }
    }

    // 创建一个视图
    QTableView tableView;
    tableView.setModel(&model);

    // 显示视图
    tableView.show();

    return a.exec();
}

5. 处理层次结构

QStandardItemModel 支持分层数据结构,你可以将项嵌套在其他项之下。

QStandardItem *parentItem = model.invisibleRootItem(); // 获取根项

// 创建一些子项
QStandardItem *childItem1 = new QStandardItem("Child 1");
QStandardItem *childItem2 = new QStandardItem("Child 2");

// 将子项添加到父项中
parentItem->appendRow(childItem1);
parentItem->appendRow(childItem2);

// 再创建一些孙项
QStandardItem *grandChildItem1 = new QStandardItem("Grand Child 1");
childItem1->appendRow(grandChildItem1);

6. 连接到 QTreeView

如果你希望显示分层数据结构,可以使用 QTreeView

#include <QTreeView>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QStandardItemModel model;

    // 创建一些项并嵌套
    QStandardItem *parentItem = new QStandardItem("Parent");
    model.appendRow(parentItem);

    QStandardItem *childItem1 = new QStandardItem("Child 1");
    parentItem->appendRow(childItem1);

    QStandardItem *grandChildItem1 = new QStandardItem("Grand Child 1");
    childItem1->appendRow(grandChildItem1);

    // 创建一个视图
    QTreeView treeView;
    treeView.setModel(&model);

    // 显示视图
    treeView.show();

    return a.exec();
}

总结

QStandardItemModel 提供了一个灵活且强大的方式来管理和显示结构化数据。你可以通过 setItemappendRow 等方法设置和添加数据,并使用视图(如 QTableViewQTreeView)来展示这些数据。希望这些示例能帮助你更好地理解和使用 QStandardItemModel


网站公告

今日签到

点亮在社区的每一天
去签到