qTreeView scrollToBottom()被忽略

时间:2014-12-23 17:09:51

标签: c++ qt qtreeview

Overflowers!

我在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;
}

据我所知,一切正常(我在标准输出上得到&#34; ValidIndex&#34;字符串),但小部件根本没有滚动到底部。

我使用的是桌面QT5.0.2 msvc2010 32位。

任何想法?谢谢。 →

2 个答案:

答案 0 :(得分:0)

QFileSystemModelQFileSystemWatcher在单独的帖子中保持最新。因此,仅仅在树视图上设置模型并不能确保在调用scrollToBottom时完全填充模型。使用具有较小延迟的单次定时器可以给模型填充时间。

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

此外,(并且我不知道您的应用程序,因此可能会或可能不是这样),可能让您的用户感到困惑,他们需要查看的数据位于无论如何,视图的底部。您可以考虑是否可以按相反的顺序对视图项进行排序(从而在顶部获得所需的数据)以避免滚动并可能使使用更直观。

答案 1 :(得分:0)

这是因为num1str, num2str = sys.argv[1], sys.argv[2] try: # might as well do float, because every valid integer that can be represented in a # string is also a valid float num1 = float(num1str) num2 = float(num2str) num3 = num1 + num2 except ValueError: # this happens if the variable cannot be converted, e.g. the user entered something # that cannot be interpreted as a float ... 的异步工作方式,以及Qt中从未修复的bug:https://bugreports.qt.io/browse/QTBUG-9326

您可以在调用QFileSystemModel之前立即执行QApplication::sendPostedEvents()来解决此问题,但是必须在连接到scrollTo()信号的函数中调用它们:

directoryLoaded