Anzeige:
Ergebnis 1 bis 5 von 5

Thema: qt Dateienansicht ohne Endungen

  1. #1
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177

    qt Dateienansicht ohne Endungen

    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:
    Code:
    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!
    _

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ich bin leider kein Experte auf dem Gebiet Models, aber ich denke es ist einfacher entweder von QDirModel abzuleiten und data() für Qt:isplayRole so zu überschreiben, dass es nur den von dir gewünschten Teilstring liefert, oder diese Filterung in einem Proxy Model zu machen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    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.



    vielen dank!
    Geändert von dml (24-11-2008 um 15:47 Uhr)

  4. #4
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    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:
    Code:
     
    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).toString();
    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.
    Geändert von dml (10-02-2009 um 15:53 Uhr)

  5. #5
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Und am Ende ist es so Einfach:
    Code:
    model->setReadOnly(false);
    doch Vorsicht, das benennt auch die Dateien um!


    Also besser ein eigenes QStandardItemModel erstellen.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •