qt QStandardItem详解
1、概述
QStandardItem是Qt框架中QStandardItemModel的一个基础元素,用于在基于项的模型(如QStandardItemModel)中表示单个数据项。QStandardItem可以存储文本、图标、工具提示等丰富的信息,并且支持数据的编辑和自定义显示。通过组织多个QStandardItem,可以构建出复杂的数据结构,如表格或树形结构,这些结构可以通过QTableView、QTreeView等视图控件进行展示。
QStandardItem的一个关键特性是它可以包含子项,从而形成一个层次结构。这使得QStandardItem不仅适用于平面表格数据,还适用于需要表示层次关系的数据,如文件系统、组织结构等。
2、重要方法
QStandardItem类提供了多种方法来操作和管理数据项,以下是一些重要的方法:
- setText(const QString &text):设置项的文本内容。
- text() const:返回项的文本内容。
- setIcon(const QIcon &icon):设置项的图标。
- icon() const:返回项的图标。
- setToolTip(const QString &toolTip):设置项的工具提示。
- toolTip() const:返回项的工具提示。
- setCheckable(bool checkable):设置项是否可以被选中(打勾)。
- isCheckable() const:检查项是否可以被选中。
- setCheckState(Qt::CheckState state):设置项的选中状态(Qt::Unchecked、Qt::PartiallyChecked、Qt::Checked)。
- checkState() const:返回项的选中状态。
- setEditable(bool editable):设置项是否可编辑。
- isEditable() const:检查项是否可编辑。
- appendRow(const QList<QStandardItem *> &items = QList<QStandardItem *>()):向项的子项列表中添加一行。
- insertRow(int row, const QList<QStandardItem *> &items = QList<QStandardItem *>()):在指定位置向项的子项列表中插入一行。
- removeRow(int row):从项的子项列表中移除指定行。
- rowCount() const:返回项的子项行数。
- columnCount() const:返回项的子项列数(对于顶层项,这通常没有意义,因为顶层项不包含列信息,而是行信息,但子项可以有列)。
3、重要信号
QStandardItem类本身并不直接发射信号,但它作为QStandardItemModel中数据项的代表,当模型中的数据发生变化时(如项的文本、选中状态、子项等被修改),QStandardItemModel会发射相应的信号。这些信号包括:
- itemChanged(QStandardItem *item):当项的数据发生变化时发射此信号。
- rowsInserted(const QModelIndex &parent, int start, int end):当在指定父项下插入行时发射此信号。
- rowsRemoved(const QModelIndex &parent, int start, int end):当从指定父项下移除行时发射此信号。
- layoutChanged():当模型的布局发生变化时发射此信号,例如添加、删除或移动项。
注意:这些信号是由QStandardItemModel发射的,而不是QStandardItem本身。QStandardItem主要作为数据容器,而信号和槽机制则用于在模型层面上通知视图或其他监听器关于数据的变化。
#include <QApplication>
#include <QTableView>
#include <QStandardItemModel>
#include <QStandardItem>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建QTableView对象
QTableView tableView;
// 创建QStandardItemModel对象
QStandardItemModel model;
model.setHorizontalHeaderLabels(QStringList() << "Name" << "Age" << "Gender");
// 创建QStandardItem项并添加到模型中
QList<QStandardItem *> row1;
row1.append(new QStandardItem("Alice"));
row1.append(new QStandardItem("30"));
row1.append(new QStandardItem("Female"));
model.appendRow(row1);
QList<QStandardItem *> row2;
row2.append(new QStandardItem("Bob"));
row2.append(new QStandardItem("25"));
row2.append(new QStandardItem("Male"));
model.appendRow(row2);
// 将模型设置给QTableView
tableView.setModel(&model);
// 显示QTableView
tableView.show();
return app.exec();
}
觉得有帮助的话,打赏一下呗。。