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位。
任何想法?谢谢。 →
答案 0 :(得分:0)
QFileSystemModel
和QFileSystemWatcher
在单独的帖子中保持最新。因此,仅仅在树视图上设置模型并不能确保在调用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