QFileSystemModel/QListView, automatische Auswahl eines Eintrags

Alles rund um die Programmierung mit Qt
Antworten
Wolfram
Beiträge: 8
Registriert: 12. April 2010 09:52

QFileSystemModel/QListView, automatische Auswahl eines Eintrags

Beitrag von Wolfram » 15. Oktober 2018 08:01

Hallo allerseits,

ich habe eine Frage in Zusammenhang mit dem QFileSystemModel, bei dem ich nicht weiterkomme.
Für die Anzeige von Verzeichnissen und Dateien setze ich einen TreeView und einen ListView mit jeweils einem QFilSystemModel (benannt als m_dirModel und m_fileModel) ein.
Beim Wechsel des Verzeichnisses wird über das onChanged Ereignis des dazugehörigen selectionModels das anzuzeigende Verzeichnis neu gesetzt:

QModelIndex ix = m_fileModel->setRootPath(verzeichnis);
ui->listViewFiles->setRootIndex(ix);

Das klappt soweit alles, die Verzeichnisinhalte werden angezeigt.
Wie kann ich jetzt aber erreichen, dass der erste Eintrag in der Verzeichnisanzeige (in meinem Fall ein Icon, dass ich über einen QFileIconProvider erstellt habe) unmittelbar ausgewählt wird? Es sollen nämlich in dem Moment gleich zugehörige Informationen angezeigt werden. Das klappt momentan nur, wenn ich im Anschluß an den Verzeichniswechsel ein Icon im ListView explizit auswähle und so wiederum über das onChanged Event dessen selectionModels weitergehe.

Hänge da leider im Moment fest, daher Danke für jeden Tip!
Gruß, Wolfram

Christian81
Beiträge: 7313
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QFileSystemModel/QListView, automatische Auswahl eines Eintrags

Beitrag von Christian81 » 15. Oktober 2018 19:33

Mit setCurrentIndex() kann man den aktuellen Index (und indirekt so auch die Selektion) setzen -> http://doc.qt.io/qt-5/qabstractitemview ... rrentIndex
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung

Wolfram
Beiträge: 8
Registriert: 12. April 2010 09:52

Re: QFileSystemModel/QListView, automatische Auswahl eines Eintrags

Beitrag von Wolfram » 16. Oktober 2018 13:49

Hallo Christian,

Danke dir. Das hatte ich in der Doku schon gefunden und damit rumprobiert. Aber es gelingt mir nicht, an den ersten Eintrag bzw Index im ListView zu kommen. Zumindest erfolgt im onChange Event des Selection Models keinerlei Reaktion.

besten Gruß, Wolfram

Christian81
Beiträge: 7313
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QFileSystemModel/QListView, automatische Auswahl eines Eintrags

Beitrag von Christian81 » 16. Oktober 2018 17:33

Ein QListView hat keine Hierarchie also sollte der erste Eintrag mit model->index(0,0, QModelIndex()) erreichbar sein. Außer natürlich da ist noch ein ProxyModel dazwischen oder so. Um mehr sagen zu können bräuchte man etwas Code.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung

Wolfram
Beiträge: 8
Registriert: 12. April 2010 09:52

Re: QFileSystemModel/QListView, automatische Auswahl eines Eintrags

Beitrag von Wolfram » 17. Oktober 2018 07:20

Hallo Christian,
die Signal/Slot Verbindungen werden zu Beginn gesetzt...

---
connect(ui->treeViewDirs->selectionModel(),
SIGNAL(currentChanged(const QModelIndex& , const QModelIndex&)), this,
SLOT(onCurrentDirectoryChanged(const QModelIndex& , const QModelIndex&)));

connect(ui->listViewFiles->selectionModel(),
SIGNAL(currentChanged(const QModelIndex& , const QModelIndex&)), this,
SLOT(onCurrentFileChanged(const QModelIndex& , const QModelIndex&)));
---

und die Ereignisse sollen dann im Prinzip wie im Folgenden behandelt werden.
(Am markierten Bereich habe ich inzwischen soviel rumprobiert, dass wahrscheinlich gar nix mehr stimmt)

void MainWindow::onCurrentDirectoryChanged( const QModelIndex & current, const QModelIndex & previous )
{
Q_UNUSED(previous);
if (current.isValid()) {
QString sPath = mDirModel->fileInfo(current).absoluteFilePath();
ui->listViewFiles->setRootIndex(mFileModel->setRootPath(sPath));

QModelIndex ix= ui->listViewFiles->model()->index(0,0,QModelIndex());
ui->listViewFiles->selectionModel()->select( ix, QItemSelectionModel::Select );

}
}

void MainWindow::onCurrentFileChanged( const QModelIndex & current, const QModelIndex & previous )
{
Q_UNUSED(previous);
if (current.isValid()) {
QString sPath = mFileModel->fileInfo(current).absoluteFilePath();
qDebug() << sPath;
}
}

Gruß, Wolfram

Christian81
Beiträge: 7313
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QFileSystemModel/QListView, automatische Auswahl eines Eintrags

Beitrag von Christian81 » 17. Oktober 2018 19:32

Hast Du das mit setCurrentIndex() mal ausprobiert?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung

Wolfram
Beiträge: 8
Registriert: 12. April 2010 09:52

Re: QFileSystemModel/QListView, automatische Auswahl eines Eintrags

Beitrag von Wolfram » 19. Oktober 2018 18:16

Brachte leider auch nichts. Aber inzwischen hat es sich geklärt, der Fehler lag wohl in der Zeile

QModelIndex ix= ui->listViewFiles->model()->index(0,0,QModelIndex());

Richtig wäre

QModelIndex ix= ui->listViewFiles->model()->index(0,0, ui->listViewFiles->rootIndex());

Damit wird dann auf das erste Element ausgehend vom aktuellen Verzeichnis zugegriffen.

Danke nochmals und Gruß, Wolfram

Christian81
Beiträge: 7313
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QFileSystemModel/QListView, automatische Auswahl eines Eintrags

Beitrag von Christian81 » 20. Oktober 2018 09:07

Stimmt, Du setzt ja den rootIndex neu, also ist root in dem Fall nicht QModelIndex(). Das habe ich nicht bedacht :)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung

Antworten