Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

ListView & dirmodel :: expand RootPath



  • Bonjour,
    J'ai une listview sur QFileSystemModel.
    Problème, lors de la création de l'objet, le répertoire de travail ne se déploie pas comme je voudrais.
    Du coups, un p'tit bouton pour ouvrir l'arborescence au Qstring sPath.

    void MainWindow::on_pushButton_5_clicked()
    {
        QString sPath = "D:/Temp/";
        ui->treeView->expand(dirmodel->index(sPath));
    }
    

    Avec un lecteur (c:\ ou encore f:\ …), l'arbre se déploie bien. Mais avec un répertoire, rien, nada, niet "peau de balle " …

    Mais question, expand, ne fonctionnerait il pas qu'avec les nœuds suivants ?
    Du coups, ne faudrait il pas boucler sur les répertoires ou l'instrument divin existe dans le grimoire secret de QT ?
    Dans le topic de FlaMMe du 29 Aug, on a :

    void DialogFile::setCurrentDirectory(QString currentDirectory){
        ui->listView_Fichier->setRootIndex(fileModel->setRootPath(currentDirectory));
        ui->treeView_Lecteur->expand(dirModel->index(currentDirectory));
        ui->lineEdit_Path->setText(currentDirectory);}
    

    Ce qui indiquerai la bonne marche de la procédure expand …
    Je patauge et la mare n est pas profonde …

    Une idée cher érudit ?!!



  • Visiblement, c'est une boucle.

    void MainWindow::on_pushButton_5_clicked()
    {
        QString sPath = "D:/tmp/tmp1/tmp2";
        ui->listView->setRootIndex(filemodel->setRootPath(sPath));
    QString tmp2="";
    foreach(const QString tmp, sPath.split("/")){
            tmp2 +=tmp+"/";
            ui->treeView->expand(dirmodel->index(tmp2));
            ui->textEdit->append("foreach :"+ tmp2);
    }
    }
    

    Ho, grimoire, grimoire chéri, je n'ai pas encore trouver la recette pour transformer le Pb en Or…



  • N'empêche que je n'arrive pas à griser le premier élément de la liste de fichier à la création ...

        filemodel->setFilter(QDir::NoDotAndDotDot | QDir::Files );
        filemodel->setRootPath(sPath);
        ui->listView->setModel(filemodel);
        ui->listView->setRootIndex(filemodel->setRootPath(sPath));
    

    testé:

    ui->listView->setFocus();
    ui->listView->setCurrentIndex(filemodel->index(sPath));
    

    Ok sPath n'est pas logique …

    ui->listView->setCurrentIndex(filemodel->index(1,0));
    

    Visiblement la liste est un sous élément (vu le comportement de dirmodel …)

    pas nouveau comme problème


  • Lifetime Qt Champion

    Bonsoir,

    QFileSystemModel est asynchrone, il faut se servir du signal directoryLoaded afin d'effectuer les opérations suivantes une fois le répertorie chargé par le modèle.



  • Bonjour,
    Un truc du genre ?!!

    QObject::connect(ui->listView,         QFileSystemModel::directoryLoaded(sPath),      [=] () {
                  ui->listView->setCurrentIndex(idx);        }        );
                            Semantic Issue **Call to non-static function without on object argument**
    

    Je cherche . Voilà plus de warning ...

        QModelIndex idx = filemodel->setRootPath(sPath);
        connect(filemodel,& QFileSystemModel::directoryLoaded,[&] () {
            ui->listView->setCurrentIndex(idx);
        });
    

    Non, pas de premier élément sélectionné...



  • autre question; dans la function suivante, la fonction count ne renvoie pas le résultat escompté .

    oid MainWindow::on_pushButton_6_clicked()  //select all
    {
        QModelIndexList  list;
        ui->listView->selectAll();
        list = ui->listView->selectionModel()->selectedIndexes();
        ui->textEdit->append("<b>Count List  :</b>" + QString(list.count()));
        for(QModelIndexList::iterator it = list.begin();it != list.end();it++){
        if( (*it).column() == 0 ) ui->textEdit->append(filemodel->fileInfo((*it)).absoluteFilePath());
        }
    
    }
    

  • Lifetime Qt Champion

    Quel est le résultat escompté ?
    Quel est le résultat obtenu ?



  • Ta question est fondée. En fait, cela est plus un effet esthétique qu'une variable de programmation.
    Le Signal a pour but de sélectionner, marquer un élément dans le fileView filtré avec les arguments QDir::NoDotAndDotDot | QDir::Files. L'objectif de programmation était d'accéder à un Indice du model Et donc de tester les slots cliquer sans avoir à le sélectionner …
    La variable count a plutôt un rôle de statistique. Pouvoir faire un visuel sur la progression de traitement 1/250 …

    Le but de l'application est de convertir des fichier m4a en mp3 en ajoutant le titre et autre bidule dans les métadonnées. Je n'ai pas trouvé la commande de VLC permettant de changer des métadonnées. En regardant chez QT, il me semble que c'est possible.

    La commande VLC est :

    "vlc" --no-repeat --no-loop -I dummy -vvv "audio.m4a" --sout=#transcode{acodec="mp3",ab=128} :std{access="file",mux="raw",dst="J:\audio.mp3"} 
    vlc://quit
    

    D'ailleurs, j'ai aussi du mal à articuler les arguments de VLC dans la function Qprocess

    proc->start(program , arguments);
    
    Program : VLC
    arguments <<  "--no-repeat --no-loop -I dummy -vvv ";
    arguments <<  name ;
    arguments << "--sout=#transcode{acodec=\"mp3\",ab=128,meta-title=\"" +mp3name  + "}";
    arguments << ":std{access=\"file\",mux=\"raw\",dst=\"J:\\"+ mp3name + "\"} ";
    arguments << "vlc://quit";
    
    ne pas oublier            
    proc->waitForFinished();
    

    Je n'ai pas retrouvé le forum qui parle de l'utilisation et de la rédaction des commandes "shell".
    En voilà 1 2

    Bref, j'ai pas fini d'en parler ….

    Apres moult correction, y a des espaces qui trainaient et

    proc->start(program + arguments.join(' '));
    

    Plus qu'à trouver comment y mettre un titre pour cte autoradio …

    Aie Problème d'écriture et de taille si fichier existe ou doublon ….


  • Lifetime Qt Champion

    La liste des arguments doit contenir chaque élément des arguments séparés. La séparation concerne l'option et son argument.


Log in to reply