2014-12-23 4 views
1

Overflowers!qTreeView scrollToBottom() игнорируется

Я схожу с ума, используя scrollTo() в викторине qTreeView (или QListView). Чтобы сделать мой вопрос простым, я сократил свой код до простого scrollToBottom(), который я тоже не могу использовать. Вот код MainWindow:

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <iostream> 
#include <qfilesystemmodel.h> 


MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    QFileSystemModel *model = new QFileSystemModel(this); 
    QModelIndex modelRootIndex = model->setRootPath(QDir::rootPath()); 
    ui->treeView->setModel(model); 
    ui->treeView->setRootIndex(modelRootIndex); 
    ui->treeView->scrollToBottom(); 
    if(modelRootIndex.isValid()) std::cout << "validIndex" << std::endl; 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

Насколько я знаю, что все в порядке (я получаю «ValidIndex» строку на стандартный вывод), но виджет не прокручивать вниз на всех.

Я использую Desktop QT5.0.2 msvc2010 32bit.

Любая идея? Благодарю. L

ответ

0

QFileSystemModel и QFileSystemWatcher поддерживаются в актуальном состоянии в отдельной теме. Таким образом, просто установка модели в древовидном представлении не гарантирует, что модель будет полностью заполнена к моменту совершения вызова scrollToBottom. Используйте таймер с одним выстрелом с небольшой задержкой, чтобы дать время модели для заполнения.

QTimer::singleShot(1000, ui->treeView, SLOT(scrollToBottom())); 

Кроме того, (и я не знаю, ваше приложение, так что это может или не может быть правдой), что может ввести в заблуждение пользователей о том, что данные, которые они должны видеть, находится в нижней части в любом случае. Вы можете подумать о том, можете ли вы сортировать элементы представления в обратном порядке (имея, таким образом, нужные вам данные в верхней части), чтобы избежать прокрутки и потенциально сделать использование более интуитивно понятным.

+0

Николас, спасибо. Задача решена. Код, который я написал здесь, фактически был игрушечной проблемой, целью которой было проанализировать мою реальную проблему, связанную с методом scrollTo (...). На основе вашего намека эта другая проблема была решена. Еще раз спасибо. L –

+0

Если этот ответ помог, не стесняйтесь повышать его или отмечать как ответ. Добро пожаловать в SO! –

+0

Николас, я смог принять ваш ответ (так же, как отметить его как ответ?), Но не отметить его как полезный, поскольку ему нужно 15 репутаций ... Я сделал это правильно? –

Смежные вопросы