karabaja4
12th May 2011, 12:30
Hello,
I have a problem making QTreeView work as expected.
I'm trying to make a simple filesystem tree using QFileSystemModel. I made this to work, but when I start my application, in the first 0.5 - 1 seconds of running the program the tree appears un-ordered (beginning with the home folder) and without a scrollbar. Example pictures are as follows:
This is as it appears on the cold startup for the first 0.5 - 1 seconds:
http://andromeda.kiwilight.com/~dule/upload/example_unsorted.png
This is as it appears after the previous image, that is, after 0.5 - 1 seconds:
http://andromeda.kiwilight.com/~dule/upload/example_sorted.png
My code is as follows:
mainwindow.cpp
#include <QtGui>
#include "mainwindow.h"
MainWindow::MainWindow() {
QString startPath = QDir::currentPath();
// create system models ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
treeModel = new QFileSystemModel(this);
treeModel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs);
treeModel->setRootPath("/");
// tree ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
treeDock = new QDockWidget("Tree view", this);
treeView = new QTreeView(treeDock);
QWidget* dummyWidget = new QWidget(); //remove dock titlebar
treeDock->setTitleBarWidget(dummyWidget);
treeView->setModel(treeModel);
treeView->setHeaderHidden(true); //no headers
treeView->setUniformRowHeights(false); //better performance
treeView->hideColumn(1);
treeView->hideColumn(2);
treeView->hideColumn(3);
treeView->hideColumn(4);
treeView->setRootIndex(treeModel->index("/"));
treeView->setCurrentIndex(treeModel->index(startPath));
treeView->scrollTo(treeModel->index(startPath));
treeDock->setWidget(treeView); //add tree to dock
this->addDockWidget(Qt::LeftDockWidgetArea, treeDock);
// statusbar ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
status = statusBar();
}
(I do need the dock)
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtCore>
#include <QtGui>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
private:
QFileSystemModel *treeModel;
QTreeView *treeView;
QDockWidget *treeDock;
QStatusBar *status;
QMenuBar *menuBar;
};
#endif // MAINWINDOW_H
main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
=> My QTCreator project file: download here (http://andromeda.kiwilight.com/~dule/upload/cccc.tar.gz)
*
=> I forgot to mention the problem (maybe I wasn't clear), I'm trying to eliminate that interval when the tree is un-ordered and without a scrollbar. I want it to appear like in the second picture from the start.
I was going nuts trying to solve this but no luck...
Any help would be greatly appreciated!
I have a problem making QTreeView work as expected.
I'm trying to make a simple filesystem tree using QFileSystemModel. I made this to work, but when I start my application, in the first 0.5 - 1 seconds of running the program the tree appears un-ordered (beginning with the home folder) and without a scrollbar. Example pictures are as follows:
This is as it appears on the cold startup for the first 0.5 - 1 seconds:
http://andromeda.kiwilight.com/~dule/upload/example_unsorted.png
This is as it appears after the previous image, that is, after 0.5 - 1 seconds:
http://andromeda.kiwilight.com/~dule/upload/example_sorted.png
My code is as follows:
mainwindow.cpp
#include <QtGui>
#include "mainwindow.h"
MainWindow::MainWindow() {
QString startPath = QDir::currentPath();
// create system models ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
treeModel = new QFileSystemModel(this);
treeModel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs);
treeModel->setRootPath("/");
// tree ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
treeDock = new QDockWidget("Tree view", this);
treeView = new QTreeView(treeDock);
QWidget* dummyWidget = new QWidget(); //remove dock titlebar
treeDock->setTitleBarWidget(dummyWidget);
treeView->setModel(treeModel);
treeView->setHeaderHidden(true); //no headers
treeView->setUniformRowHeights(false); //better performance
treeView->hideColumn(1);
treeView->hideColumn(2);
treeView->hideColumn(3);
treeView->hideColumn(4);
treeView->setRootIndex(treeModel->index("/"));
treeView->setCurrentIndex(treeModel->index(startPath));
treeView->scrollTo(treeModel->index(startPath));
treeDock->setWidget(treeView); //add tree to dock
this->addDockWidget(Qt::LeftDockWidgetArea, treeDock);
// statusbar ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
status = statusBar();
}
(I do need the dock)
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtCore>
#include <QtGui>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
private:
QFileSystemModel *treeModel;
QTreeView *treeView;
QDockWidget *treeDock;
QStatusBar *status;
QMenuBar *menuBar;
};
#endif // MAINWINDOW_H
main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
=> My QTCreator project file: download here (http://andromeda.kiwilight.com/~dule/upload/cccc.tar.gz)
*
=> I forgot to mention the problem (maybe I wasn't clear), I'm trying to eliminate that interval when the tree is un-ordered and without a scrollbar. I want it to appear like in the second picture from the start.
I was going nuts trying to solve this but no luck...
Any help would be greatly appreciated!