鲜花过多!
尝试在qTreeView(或QListView)小部件中使用scrollTo()令我发疯。为了简化我的问题,我将代码简化为一个简单的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 32位。
任何的想法?谢谢。大号
最佳答案
QFileSystemModel
和QFileSystemWatcher
在单独的线程中保持最新状态。因此,仅在树视图上设置模型并不能确保在调用scrollToBottom
时将完全填充模型。使用具有较小延迟的单发计时器,可以给模型时间填充数据。
QTimer::singleShot(1000, ui->treeView, SLOT(scrollToBottom()));
另外,(而且我不知道您的应用程序,所以这可能是正确的,也可能不是正确的),这可能会使您的用户感到困惑,他们需要查看的数据仍然位于视图的底部。您可能会考虑是否可以以相反的顺序对视图项进行排序(因此,将所需的数据放在顶部),以避免滚动并可能使用法更加直观。