Portál AbcLinuxu, 15. května 2025 11:20
Zdravím, s následujícím kódem:
#include <QApplication> #include <QListView> #include <QDirModel> int main (int argc, char **argv) { QApplication app(argc, argv); QDirModel model; model.setFilter(QDir::Files); QListView view; view.setModel(&model); view.show(); view.setRootIndex(model.index("/home/adam/Hudba")); view.setRootIndex(model.index("/home/adam")); return app.exec(); }
mám problém. Ve výpisu složky 'adam' se mi zobrazí i složka 'Hudba'. Co s tím?
co to zkusit takhle?
<code>
#include <QApplication>
#include <QListView>
#include <QDirModel>
int main (int argc, char **argv)
{
QApplication app(argc, argv);
QDirModel model;
model.setFilter(QDir::Files);
QStringList paths;
paths << "/home/adam/hudba" << "home/adam";
QListView view;
view.setModel(&model);
view.show();
view.setRootIndex(paths);
return app.exec();
}
</code>
vyzkouseno nemam, jen me to tak napadlo
Co by to mělo udělat?
Ty dva řádky s nastavením rootIndexu musí zůstat dvěma řádky, dělá to uživatel, ne program
jsem rikal, ze me to jen napadlo
me se totis zda, ze pri originalnim kodu, se rootindex nahradi druhym v poradi a z prvniho si pamatuje jen nazev slozky, kterou taky zobrazi. pri prohozeni tech cest by se mu totiz vypsala jen slozka hudba (tedy soubory v ni).
ja si tu jen premyslel, jak predat obe cesty najednou
no, tak zkusil jsem to. budu se na to moct podivat az doma
jeste me napadlo, zda neni problem v QListView
na qtforum jsem cetl v reakcich, ze je problem s QListView pri pouziti QDirModel->setFilter
problem byl tedy QT 4.0.(1?), ale pokud to neopravili, tak je to taky moznost
co to zkusit bez filtru, zda to vypise obe slozky, nebo pripadne zkusit QTreeView namisto QListView?
Používám Qt 4.5.0 (aspoň podle generovaného makefile).
Kde jsi to zjistil? Já to hledal všude možně, a nenašel nic.
Bez filtru to vypisuje všechno tak, jak má, a QTreeView dělá to samé.
na www.qtforum.org byla zminka o problemech s QListView pri pouziti filtru na QDirModel
abych ale pravdu rek, nepamatuju se v jake souvislosti.
pri pouziti TreeView se take zobrazi slozka (v tvem pripade HUDBA) jako podadresar, ktery lze po te rozbalit. v ListView by to melo byt obdobny s tim, ze bys musel do kodu dopsat udalosti pro stisk tlacitka, aby se ti podslozka rozbalila.
a zjistil jsem, v prvnim prispevku, kde jsem se snazil o upravu kodu, jsem napsal naprostou kravinu :). jsem ja to ale vul :)
Odhliadnuc od faktu, ze ten kod nedava moc zmysel (prepisujes nastavenie root indexu) treba povedat, ze je tam fakt bug aj v Qt -- ked prehodis setRootIndex() volania (cize najpr /home/adam a az potom /home/adam/Hudba) tak rychlo zistis, ze kod sa chova tak ako ma, cize vypise obsah /home/adam bez "Hudba". Ale tak ako to mas to vypisuje aj to Hudba, co je dost divne a nahlasil by som to ako bug.
Kazdopadne, v QDirModeli nemozes nastavovat viac rootov takymto sposobom...
ehm, malo byt "...chova tak ako ma, cize vypise obsah /home/adam/Hudba." nie "/home/adam bez Hudba".
Kód nedává smysl, protože je ořezaný na úplné minimum. Účelem není nastavovat víc rootů, ale měnit ho za běhu programu. Chtěl jsem dosáhnout podobné funkce jako má přehrávač quod libet: mít dva pohledy, v jednom adresářovou strukturu, ve druhém obsah aktuálně vybraného adresáře. Nakonec to ale budu muset stejně udělat jinak.
Jak to nahlásit? Ještě nikdy jsem to nedělal
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.