2014-12-23 57 views
1

溢出!qTreeView scrollToBottom()忽略

我越來越瘋狂嘗試在qTreeView(或QListView)小部件中使用scrollTo()。爲了簡化我的問題,我將代碼簡化爲一個簡單的scrollToBottom(),我也無法使用它。下面是主窗口代碼:

#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; 
} 

據我知道這一切ok(我得到在標準輸出「ValidIndex」字符串),但小部件不滾動到底的。

我正在使用桌面QT5.0.2 msvc2010 32位。

任何想法?謝謝。 L

回答

0

QFileSystemModelQFileSystemWatcher在單獨的線程中保持最新。因此,只需在樹形視圖上設置模型並不能保證在您撥打scrollToBottom時,模型將完全填充。使用具有小延遲的單次計時器給模型時間填充。

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

另外,(我不知道你的應用程序,所以這可能是也可能不是真的)它可以是混亂的用戶,他們需要看到的數據是在的底部無論如何。您可以考慮是否可以按相反順序對視圖項目進行排序(因此需要在頂部使用所需的數據)以避免滾動,並可能使用法更加直觀。

+0

尼古拉斯,謝謝。問題解決了。我在這裏寫的代碼實際上是一個玩具問題,其目標是分析我與scrollTo(...)方法有關的真正問題。根據你的提示,這個問題已經解決了。再次感謝。 L –

+0

如果此答案有幫助,請隨時註冊或者將其標記爲答案。歡迎來到SO! –

+0

尼古拉斯,我能夠接受你的答案(標記爲答案一樣嗎?),但不要將其標記爲有用,因爲它需要15個聲譽......我做得正確嗎? –