PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : qt Dateienansicht ohne Endungen



dml
22-11-2008, 14:39
Hi,
ich brauche mal wieder Eure hilfe! :)

Ich würde gern erreichen das bei meinem Programm bei der Ansicht der Dokumente nicht die Dateiendungen mit angegeben werden.

Mein Lösungsansatz bis jetzt sieht so aus:


CocktailList::CocktailList(QWidget *parent):QWidget (parent){
// qDebug() << "CocktailList::CocktailList";

cocktailpath=QString("%1/Documents/%2/")
.arg(QCoreApplication::applicationDirPath())
.arg(QLocale::system().name());
// qDebug() << "cocktailpath="<<cocktailpath;

model = new QStandardItemModel;
// model->setData(model->index(0, 0), "Cocktail", Qt::DisplayRole);
treeview = new QTreeView(this);
treeview->resize(300,parent->height());
treeview->setModel(model);

connect(treeview,SIGNAL(clicked( const QModelIndex )),
this, SLOT(setDrink(const QModelIndex )));

}

void CocktailList::addDir(QDir dir){
// ...
dirlist << dir.entryInfoList();

QStandardItem *item = new QStandardItem;
QStandardItem child[dirlist.size()];

for (int i = 0; i < dirlist.size(); ++i) {
// qDebug()<<"dirlist="<<dirlist.at(i).baseName();
child[i].setText(dirlist.at(i).baseName() );
qDebug()<<"child[i]="<<child[i].text();
item->setChild(i,&child[i]);
}
model->insertRow(0, item);
}

void CocktailList::setDrink(const QModelIndex & index ){
current_drink = model->filePath(index);
emit get_drinkname(current_drink);
}



Die childs werden auch gefuellt, doch im model werden die Zeilen nur ohne Text angezeigt.

Kann mit bitte jemand sagen was ich dabei falsch mache, vielen dank!
_

anda_skoa
22-11-2008, 17:40
Ich bin leider kein Experte auf dem Gebiet Models, aber ich denke es ist einfacher entweder von QDirModel abzuleiten und data() für Qt::DisplayRole so zu überschreiben, dass es nur den von dir gewünschten Teilstring liefert, oder diese Filterung in einem Proxy Model zu machen.

Ciao,
_

dml
24-11-2008, 14:22
So, hab`s jetzt endlich geschafft.
Ich bin dafür aber jetzt über QTreeWidget, QTreeWidgetItem und QDir gegangen. Ist zwar nicht so schön, vor allem bei update(), aber so kann ich die Verzeichnisse nach meinen Wünschen auch ordnen und ....

wenn man noch nicht so viel Erfahrung hat, muss man ebend abstriche machen. :D



vielen dank!

dml
10-02-2009, 14:46
natürlich konnte ich damit nicht zufrieden sein, sondern es war nur ein Notpflaster.
Ich habe es jetzt, wie es eigentlich richtig ist, mit setData() versucht:



QModelIndex rootIndex = model->index(rootpath);
int root_numRows = model->rowCount(rootIndex);
for (int root_row = 0; root_row < root_numRows; ++root_row) {

QModelIndex parentIndex = model->index(root_row, 0, rootIndex);
int parent_numRows = model->rowCount(parentIndex);
for (int parent_row = 0; parent_row < parent_numRows; ++parent_row) {

QModelIndex Index = model->index(parent_row, 0, parentIndex);
QString text = model->data(Index, Qt::DisplayRole).toString();

QStringList list = text.split(".html");
qDebug()<<"list="<<list<<" index="<<text;

QString filename;
filename = rootpath;
filename += rootIndex.parent().data(Qt::DisplayRole).toString( );
filename += "/";
filename += parentIndex.parent().data(Qt::DisplayRole).toStrin g();
filename += "/";
// filename += Index.parent().data(Qt::DisplayRole).toString();
filename += list[0];
qDebug()<<"filename="<<filename;
qDebug()<<"Index="<<Index;

model->setData(Index,QVariant(filename),Qt::DisplayRole );





doch er macht es einfach nicht, könnt ihr mir bitte sagen warum.

vielen dank.:)

dml
21-02-2009, 13:07
Und am Ende ist es so Einfach:

model->setReadOnly(false);
doch Vorsicht, das benennt auch die Dateien um! :D


Also besser ein eigenes QStandardItemModel erstellen. ;)