QT学习——QTreeView获取选中单行数据和多行数据

本文介绍如何在Qt中使用QTreeView控件获取单行或多行选中数据的方法,包括通过currentIndex()和selectedRows()函数定位选中项,并演示如何读取各列的具体数据。

个人感觉QTreeView有些地方的使用没有MFC的CListCtrl方便(比如在不响应单击信号的情况下,获取选中行的数据(单行和多行)),也许因为我是新手吧。
一、获取单行选中的数据

QModelIndex selected = ui.treeView->currentIndex(); //选中的行
selected = selected.sibling(selected.row(),0); //0 就是第一列元素,1就是第二列元素,依此类推
QString strColumn0(ui.treeView->model()->itemData(selected).values()[0].toString()); //由你自己每一列的QVariant绑定的值,决定获取数据的方式

以上是获取单行选中的每一列数据的关键点,至于需要获取哪些列及如何保存获取的数据,就看你的需要了。

二、获取多行数据

//获取选中的行,默认获取选中行的第一列数据(0),列的索引值和上面一样0123......
QModelIndexList selected = ui.treeView->selectionModel()->selectedRows(1);

QList<QModelIndex>::const_iterator cit;
QModelIndex temp;
QString strSelect;

for (cit = selected.begin(); cit != selected.end(); ++cit)
{
    temp = *cit;
    strSelect = ui.treeView->model()->itemData(temp).values()[0].toString();
}

如果想要获取选中行的所有列数据,则可以使用
QModelIndexList selected = ui.treeView->selectionModel()->selectedIndexes();
注意,selected里面保存的数据,先是所有行的第一列输入,然后是所有行的第二列数据,依次类推。

### 如何在 QtQTreeView获取整行数据Qt 中,`QTreeView` 是一种显示分层数据的视图组件。为了实现从 `QTreeView` 获取整行的数据,可以通过索引定位到目标项,并利用模型接口提取对应行的所有列数据。 以下是具体的代码示例以及说明: #### 示例代码 ```cpp #include <QModelIndex> #include <QAbstractItemModel> void getRowData(const QModelIndex& index, QAbstractItemModel* model) { if (!index.isValid() || !model) return; int row = index.row(); int columnCount = model->columnCount(index.parent()); QStringList rowData; for (int col = 0; col < columnCount; ++col) { QModelIndex currentIndex = model->index(row, col, index.parent()); if (currentIndex.isValid()) { QVariant data = model->data(currentIndex); rowData << data.toString(); } } qDebug() << "Row Data:" << rowData; } ``` 上述函数通过给定的 `QModelIndex` 对应的模型对象来遍历指定行中的每一列数据[^1]。具体逻辑如下: - 使用 `row()` 方法获取当前索引所在的行号。 - 调用 `columnCount()` 来计算该父级下的总列数。 - 遍历每列并调用 `index(int row, int column)` 构造新的索引来访问各列的具体单元格。 - 利用 `data()` 提取实际数据显示内容,并将其转换为字符串形式保存至列表中。 如果需要绑定此方法到按钮点击事件或其他交互操作上,则可以在类成员函数内部调用它,传入选中的项目索引作为参数。例如,在 `on_btnGet_clicked()` 插槽里执行以下命令即可完成选取动作后的处理过程[^3]: ```cpp void MainWindow::on_btnGet_clicked() { QModelIndex selectedIndex = ui->treeView->selectionModel()->currentIndex(); getRowData(selectedIndex, mModel); } ``` 以上展示了如何从选定节点处读取出完整的记录信息集合[^2]。 问题
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值