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
QFileSystemModel/QListView, automatische Auswahl eines Eintrags
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: QFileSystemModel/QListView, automatische Auswahl eines Eintrags
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
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: QFileSystemModel/QListView, automatische Auswahl eines Eintrags
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
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
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: QFileSystemModel/QListView, automatische Auswahl eines Eintrags
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
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: QFileSystemModel/QListView, automatische Auswahl eines Eintrags
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
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
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: QFileSystemModel/QListView, automatische Auswahl eines Eintrags
Hast Du das mit setCurrentIndex() mal ausprobiert?
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: QFileSystemModel/QListView, automatische Auswahl eines Eintrags
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
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
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: QFileSystemModel/QListView, automatische Auswahl eines Eintrags
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
'Funktioniert nicht' ist keine Fehlerbeschreibung