当获取文本总是错误时,逐列排序

时间:2011-07-04 13:11:53

标签: qt sorting

我正在尝试从所选行的索引号0中的列中获取文本和数据 但是我从来没有得到正确的数据我使用简单的模型视图TreeViewQSortFilterProxyModel代理来排序列,QStandardItemModel作为模型

这是在每次双击

上触发的插槽功能
connect(ui.treeView_mainwindow, SIGNAL(doubleClicked( const QModelIndex &)), this,SLOT(tree_itemClicked( const QModelIndex &))); 
....
...
void MainWindowContainer::tree_itemClicked(const QModelIndex & index)
{
    int iSelectedRow = index.row();
    QString groupID;
    QString groupName;
    groupID = m_model->item(iSelectedRow,0)->data(Qt::UserRole).toString();
    groupName = m_model->item(iSelectedRow,0)->text();      

 }

更新
好吧,我找到了答案,但我有另一个问题,答案是:

QString groupID = index.model()->index(index.row(), 0, index.parent()).data(Qt::UserRole).toString();
    QString groupName = index.model()->index(index.row(), 0, index.parent()).data(Qt::DataRole).toString();
}

我的另一个问题是如何在所选行的索引(例如:3)中将数据设置为列?

3 个答案:

答案 0 :(得分:2)

这里的问题很可能是index.row()在排序后指向代理模型中的行。这很可能与未分类的源模型中的行不同。

请尝试以下方法:

groupID = m_proxy_model->index(iSelectedRow,0).data(Qt::UserRole).toString();

答案 1 :(得分:0)

您是否尝试过使用

QStandardItem * QStandardItemModel::itemFromIndex ( const QModelIndex & index ) const;

也许你的行没有正确设置。 如果这没有用,你应该给出一个示例树,指出你点击的内容,你期望的内容,你得到的内容。

答案 2 :(得分:0)

QModelIndex modelIndex = m_proxy_model->index(iSelectedRow,0);
m_proxy_model->data (modelIndex ,Qt::UserRole).toString();