gpt4 book ai didi

qt - 如何以编程方式在 Treeview 中选择一行?

转载 作者:行者123 更新时间:2023-12-04 10:18:25 24 4
gpt4 key购买 nike

更新:让我尝试简化问题和步骤。有没有人看到我哪里出错了?此外,这是在 OSX 10.7.5/Qt 5.1 上——也许是 OSX 问题?

我传递一个指向图像目录的绝对路径并设置我的 QFileSystemModel 实例的根路径并使用它返回的索引来设置我的 QTreeView 实例根索引

QModelIndex idx = dirmodel->setRootPath(dPath);
myTreeView->setRootIndex(idx);

然后我将树 View 的当前索引设置为该索引。我猜这是指向目录 - 也许这是错误的?
myTreeView->setCurrentIndex(idx);

我尝试使用 treeView 的 selectionModel 使用该索引进行选择:
myTreeView->selectionModel()->select(idx, 
QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);

我还尝试访问目录的子项并使用它来设置当前索引和选择:
QModelIndex next_index =myTreeView->currentIndex().child(1,0);

但我仍然没有在我的树 View 上得到选择。

上下文:对于 Qt 学习项目,我正在构建一个图像查看器。我有一个带有“QFileSystemModel”支持的“QTreeView”。用户可以选择图像目录,并且只有该目录的内容会显示在 QTreeView 中(即它不显示整个文件系统,只显示用户选择的子目录)。

我想在用户更改目录时选择 QTreeView 中的第一项。我见过这个问题( Selecting a row in QTreeView programatically ),但它对我不起作用。我已经研究了几个小时了。我究竟做错了什么?我能够选择目录并显示图像,但我缺少如何设置 QTreeView 选择。

我的代码如下,各种尝试都被注释掉了。 qDebug 语句的控制台输出始终为:

next_index -1 -1


void DirBrowser::on_actionSet_Image_Directory_triggered()
{
QString dPath = QFileDialog::getExistingDirectory(this,
tr("Set Image Drectory"), QDir::currentPath());

if (!dPath.isEmpty()) {

QModelIndex idx = dirmodel->setRootPath(dPath);
myTreeView->setRootIndex(idx);
myTreeView->setCurrentIndex(idx);

QModelIndex next_index =myTreeView->currentIndex().sibling(1,0);

//QModelIndex next_index = myTreeView->model()->index(1, 0);
//QModelIndex next_index =idx.child(0,0);
qDebug() << "next_index" << next_index.row() << next_index.column();
//myTreeView->setCurrentIndex(next_index);

myTreeView->selectionModel()->select(next_index, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);

QString path = dirmodel->fileInfo(next_index).absoluteFilePath();
qDebug() << "set Dir" << path;
}
}

最佳答案

弄清楚了。问题是我试图在 QTreeView 上进行选择在指定的目录加载完成之前。换句话说,尝试在我更改目录的方法中进行选择。

解决办法是监听directoryLoaded(QString) SIGNAL那个QFileSystemModel发出。

void QFileSystemModel::directoryLoaded ( const QString & path ) [signal]

This signal is emitted when the gatherer thread has finished to load the path. This function was introduced in Qt 4.7.


connect(dirmodel,
SIGNAL(directoryLoaded(QString)),
this,
SLOT(model_directoryLoaded(QString)));

关于qt - 如何以编程方式在 Treeview 中选择一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17912812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com