QTreeWidget, drzewo ładowane przy kliknięciu

0

Witam. Stworzyłem swoją klasę, która dziedziczy po QTreeWidget, drzewo ma na celu wyświetlania struktury plików i folderów na dyskach. Zamiast ładowania wszystkich plików rekurencyjnie mniej więcej tak:

void Dodaj(folder)
{
foreach(plik,wszystkie pliki)
{
if(plik) dodajDoDrzewa();
if(folder) Dodaj(plik);
}

Postanowiłem uzupełnić foldery podczas kliknięcia w nie, do tego celu połączyłem sygnał itemActivated z zdefiniowaną przeze mnie funkcją showDirectory. No i wszystko ok, ale kiedy otworzę w moim drzewie przykładowo dysk C, widoczne tam foldery są "niby" puste tzn, nie mają przy sobie strzałki, jak jest zazwyczaj przy pustych folderach, dopiero po dwukrotnym kliknięciu folder się uzupełnia i strzałka pozostaje. Chciałbym pozbyć się takiego efektu, ale nie mam zbytnio na to pomysłu :( Zaproponujecie coś?

0

No bardzo fajnie, ale pytanie brzmi jak wygląda twój model danych?
Używasz QStandardItemModel czy może dziedziczysz po QAbstractItemModel by udostępnić swoją strukturę danych?

Mam wrażenie, że się źle do tego zabrałeś, IMO powinieneś operować jedynie na modelu.

1

Jak chcesz wyświetlać strukturę folderów to zainteresuj się QDirModelem

0

Używam zwykłych QTreeWidgetItem, może Ci się przyda część kodu:
funkcja showDirectory()

void myTreeWidget::showDirectory(QTreeWidgetItem *item, int /*column*/)
{
    QDir *rootDir = new QDir(item->text(2));            // Get path
    QFileInfoList filesList = rootDir->entryInfoList();

    foreach(QFileInfo fileInfo, filesList)
    {
        if(fileInfo.fileName()[0] == '.') continue;   // If file name is "." or ".." then take next file
        if(fileInfo.isHidden()) continue;             // Don't show a hidden file

        QTreeWidgetItem *child = new QTreeWidgetItem;
        child->setText(0,fileInfo.fileName());        // Set neme file/director

        if(fileInfo.isFile())
        {
            child->setIcon(0,QIcon(":/new/prefix1/file"));
            child->setText(1,QString::number(fileInfo.size()/1024));
        }

        if(fileInfo.isDir())
        {
            child->setIcon(0,QIcon(":/new/prefix1/folder"));
            child->setText(2,fileInfo.filePath());
        }

        item->addChild(child);

        //this->resizeColumnToContents(0);
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1