双击 QTreeView 应始终 return 第一列值
Doubleclick on QTreeView shall always return first columns value
我有我的 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() returns ID 号码。
当我点击描述时,我的 modelIndex.data()
returns 是正确的描述(第二列)。但我想再次获得相应的 ID 号(第一列)。
感谢您的帮助。提前致谢。
可以使用QModelIndex
的sibling(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());
您可以将 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,其中选择了整行:
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() returns ID 号码。
当我点击描述时,我的 modelIndex.data()
returns 是正确的描述(第二列)。但我想再次获得相应的 ID 号(第一列)。
感谢您的帮助。提前致谢。
可以使用QModelIndex
sibling(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());
您可以将 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();
}
}
}