Seite 1 von 1
[gelöst] QListView/QDirModel select Balken wie Win. Explorer
Verfasst: 1. Dezember 2007 22:44
von lordofthebrain
Hallo,
folgendes Problem. Hab ein QDirModel erstellt und zeige diese in einem QListView an. Das ganze sieht so aus:
Es geht mir hier um den blauen Select-Balken. Der geht bis zum Ende der QListView. Kann man irgendwo einstellen / programmieren, dass dieser nur so lang wie die Datei / Ordner ist. Also so:
Ich erwarte keinen vollständigen Code. Aber ich steig durch die ganze Menge an Möglichkeiten nicht mehr durch. Bin für jeden kleinen Tipp oder Ansatz dankbar.
Vielen Dank.
Gruß Fabian
Verfasst: 1. Dezember 2007 23:36
von upsala
Der Balken wird vom Delegate gezeichnet, also eigenes Delegate erstellen.
Zufällig gelöst :D
Verfasst: 14. Dezember 2007 15:26
von lordofthebrain
So, für mein Problem oben gibts folgende Lösung und zwar ohne Delegate.
Qt Version 4.3, weiß nicht ob das mit älteren auch geht.
Code: Alles auswählen
.h Datei
class dirListView : public QListView
{
protected:
void mousePressEvent (QMouseEvent *);
QRect visualRect (const QModelIndex &) const;
public:
dirListView(QWidget *);
~dirListView() {}
};
Code: Alles auswählen
.cpp Datei
dirListView::dirListView(QWidget * parent = 0 ): QListView(parent)
{
setGeometry(20,50,491,201); // Kann man natürlich auch weglassen oder modifizieren
}
// Nur wichtig, damit auch nur makiert wird innerhalb des Elementes. Siehe Windows Explorer.
void dirListView::mousePressEvent ( QMouseEvent * event)
{
QModelIndex index=indexAt(event->pos());
clearSelection();
if(index.isValid())
{
setSelection(visualRect(index),QItemSelectionModel::Select);
setCurrentIndex(index);
}
else
setCurrentIndex(QModelIndex());
}
QRect dirListView::visualRect (const QModelIndex & index) const
{
QRect result = rectForIndex(index); // Erzeugt ein Rect in der Größe des zu selektierenden Objects (Folder / Datei)
// Dieser Block ist wenn runter gescrollt wird, dass die Elemente richtig angezeigt werden.
int dx = -horizontalOffset();
int dy = -verticalOffset();
result.adjust(dx, dy, dx, dy);
return result;
}
Das ganze bassiert auf flow=QListView::TopToBottom und viewMode = QListView::ListMode. Für andere Ansichten müsste man visualRect entsprechend modifizieren.
Gruß Fabian