LINUX.ORG.RU

[Qt] QTreeView не показывает


0

0

Учусь програмированию на Qt. Значит создал проект в креаторе, кинул на виджет MainWindow TreeView, создал метод в классе MainWindow который будет указывать на папку открытия

void OpenStartFolder (QString *folder);

в методе:

void MainWindow::OpenStartFolder(QString *folder) {

       
    QDirModel model;
    QModelIndex index = model.index(*folder);
    ui->treeView->setModel(&model);
    ui->treeView->setRootIndex(index);

}

но ничего не показывается в treeView. Метод запускается в конструкторе MainWindow.

Смотрел стандартный пример, переделал свой кусок кода туда - заработало.

Стандартный пример(c моим кодом):

#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    
    QTreeView tree;
    

    QDirModel model;
    QModelIndex index = model.index("");
    tree.setModel(&model);
    tree.setRootIndex(index);


    // Demonstrating look and feel features
    tree.setAnimated(false);
    tree.setIndentation(20);
    tree.setSortingEnabled(true);

    tree.setWindowTitle(QObject::tr("Dir View"));
    tree.resize(640, 480);
    tree.show();

    return app.exec();
}

Возможно я просто что-то не понял.


Ты создаёшь model на стеке, и в конце твоей ф-ции он уничтожается.

anonymous ()
Ответ на: комментарий от UVV

void MainWindow::OpenStartFolder(const QString& folder) {

    QDirModel model;
    QModelIndex index = model.index(folder);
    this->ui->treeView->setModel(&model);
    this->ui->treeView->setRootIndex(index);

}

Все равное не показывает содержимое папки.

onto ()
Ответ на: комментарий от onto

в конструкторе MainWindow:

const QString start_folder = "/home/";

OpenStartFolder(start_folder);
onto ()
Ответ на: комментарий от nu11

Спасибо, теперь показывает.

 QDirModel * model = new QDirModel; 
QModelIndex index = model->index(folder); 

А можете обьяснить, почему не работало, чтобы я понял?

onto ()
Ответ на: комментарий от onto

QDirModel model;

если делать так, то model будет существовать только на время выполнения функции, после выхода из функции модель исчезнет и показывать будет нечего.

Кратко: не используй локальный объект в глобальных целях.

nu11 ★★★★★ ()
Ответ на: комментарий от panter_dsd

> После того как ты создал ее в куче (new), она удаляться перестала.

Причём совсем перестала. Утекла так сказать. Сохраните этот указатель, чтобы удалить его при завершении программы. Или поставьте ей родителя один из обьектов, чтобы он его удалил автоматически.

Dendy ★★★★★ ()
Ответ на: комментарий от antony986

>>я что-то запамятовал, с каких пор ты увлекся кьютом?

Давно уже. Но Gtk+ как-то больше нравится.

MuZHiK-2 ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.