双击 QTreeView 应始终返回第一列值

Posted

技术标签:

【中文标题】双击 QTreeView 应始终返回第一列值【英文标题】:Doubleclick on QTreeView shall always return first columns value 【发布时间】:2015-07-10 14:06:35 【问题描述】:

我有我的 QTreeView,其中选择了整行:

  ui->treeView->setSelectionBehavior (QAbstractItemView::SelectRows);

...并且已经填写了 ID-Number 描述。所有的结构都像一棵树。我可以点击它,并通过以下方式检索相应的选择:

ui->lineEdit->setText( modelIndex.data(Qt::DisplayRole).toString() );

我已经连接了:

  connect(ui->treeView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(onSelectedTreeView(QModelIndex)));

当我点击一个 ID 号时,它可以正常工作,并且我的 modelIndex.data() 返回 ID 号。

当我点击描述时,我的modelIndex.data() 会返回正确的描述(第二列)。但我想再次获得相应的 ID 号(第一列)。

感谢您的帮助。提前致谢。

【问题讨论】:

最好使用 QAbstractItemModel 来达到这个目的.. 【参考方案1】:

可以使用QModelIndexsibling(int row, int column)方法

在python中:

def onSelectedTreeView(index):
    firstColumnIndex=index.sibling(index.row(),0)
    print(firstColumnIndex.data())

我猜你可以这样做:

ui->lineEdit->setText(modelIndex.sibling(modelIndex.row(),0).data(Qt::DisplayRole).toString());

【讨论】:

【参考方案2】:

您可以将 treeView selectionBehavior 更改为 SelectItems。比使用 index.row() 和 index.column().. 别忘了它总是从 0 开始

onSelectedTreeView()

    //Put all your selected indexes into QModelIndexList
    QModelIndexList _indexes = ui->treeView->selectionModel()->selectedIndexes();

    // For each loop for every selected index.. 
    foreach (QModelIndex index, _indexes)
    

    //if your index data == 0 it means that you clicked into ID-number field.

   //So you can easly see which index you clicked with qdebug
   qDebug() << "Row = " << index.row() << "\t Column = " << index.column();

   // So if you want to get always index of first column(ID-Number) use QAbstractItemModel
   if(index.column().toInt() != 0 ) //if your index not equal to 0
   
      const QAbstractItemModel* absModel = index.model();

      // change index of absModel from index.column() to 0;
     QModelIndex changedIndex = absModel->data(absModel->index(index.row(), 0), Qt::DisplayRole).toInt();

     qDebug() << "Row = " << changedIndex.row() << "\t Column = " << changedIndex.column();
   

   

【讨论】:

以上是关于双击 QTreeView 应始终返回第一列值的主要内容,如果未能解决你的问题,请参考以下文章

qt qtreewidget自动展开失效

matlab中如何给已有矩阵插入一行或一列值

根据 JTable 中的第一列值着色特定行?

jQuery:获取 HTML 表格第四行(仅)的第一列值

RDD 只有第一列值:Hbase,PySpark

如何在数据工厂中获取 CSV 的第一行和第一列值?