我将
QFileSystemModel
与 QListView
一起使用,并且我希望默认选择模型显示的第一个项目。
每次单击某个项目时如何执行此操作?
使用
setCurrentIndex
应该可以完成这项工作:
view->setCurrentIndex(fsModel->index(0, 0));
fsModel
这里可以是类似 view->model()
.
这将选择并单击第一项:
ui->ListWidget->setCurrentRow(0);
QListWidgetItem* item = ui->ListWidget->item(0);
ui->ListWidget->itemClicked(item);
我遇到了同样的问题(Pyside6 python),这是我的解决方法(如果更改语法,应该在 C++ 中工作)。虽然不是那么好,但是可以用!
class someClass:
def __init__(self):
self.fileSystemModel = QFileSystemModel()
self.fileSystemModel.setRootPath(path)
self.view = QListView()
self.view.setModel(self.fileSystemModel)
self.view.setRootIndex(self.fileSystemModel.index(self.fileSystemModel.rootPath()))
self.fileSystemModel.layoutChanged.connect(self.updateSelectedItem)
def updateSelectedItem(self):
self.view.setCurrentIndex(self.view.moveCursor( QAbstractItemView.CursorAction.MoveHome,Qt.NoModifier))
您正在寻找的线路可能是这两行:
self.fileSystemModel.layoutChanged.connect(self.updateSelectedItem)
如果您只在开始时需要它,directoryLoaded Signal 也可能有效。
self.view.setCurrentIndex(self.view.moveCursor( QAbstractItemView.CursorAction.MoveHome,Qt.NoModifier))
moveCursor 提供了一个 QModelIndex(在本例中为左上角 -> MoveHome)。
如果您使用其他 QAbstractItemView.CursorAction,例如 QAbstractItemView.CursorAction.MoveDown,您可以选择下一项。
更多这里:
您是否尝试过连接 QListView 信号:
void clicked ( const QModelIndex & index )
到插槽并从
读取数据QModelIndex::data
它会提供索引,检查是否是第一个,如果是,则设置它。