我有一个QAbstractTableModel,它具有显示的自定义项目列表,该TableModel是TableView的模型。如何每隔X秒钟刷新一次TableView?我尝试了beginInsertRows和endInsertRows,但是由于我每秒编辑太多项目,所以这造成了滞后,所以我只想每x秒刷新一次。
答案 0 :(得分:0)
使用>> uname -r
5.2.3-arch1-1-ARCH
>> pacman -Q --info python-flask
Name : python-flask
Version : 1.0.3-1
Description : Micro webdevelopment framework for Python
Architecture : any
URL : http://flask.pocoo.org/
Licenses : custom:BSD
Groups : None
Provides : None
Depends On : python-werkzeug python-jinja python-itsdangerous python-click
Optional Deps : None
Required By : python-flask-wtf
Optional For : None
Conflicts With : None
Replaces : None
Installed Size : 789.00 KiB
Packager : Felix Yan <felixonmars@archlinux.org>
Build Date : Sat 25 May 2019 10:31:00 AM IST
Install Date : Sun 04 Aug 2019 01:11:45 AM IST
Install Reason : Installed as a dependency for another package
Install Script : No
Validated By : Signature
例如
QTimer
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(processOneThing()));
在timer->start(1000);
中,您可以编写刷新数据的代码并使用processOneThing
答案 1 :(得分:0)
使用beginInsertRows
和endInsertRows
可能会在内部引起很多不必要的重组。如果模型的结构(即订购,项目数量等)没有改变,仅显示内容,则最好发出dataChanged
信号。
该信号告诉连接的视图刷新,并且它们只会重绘视口中可见的项目,而不会处理隐藏的项目。
#include <QtWidgets/QApplication>
#include <QtCore/qtimer.h>
#include <QtWidgets/qtableview.h>
#include <QtCore/QAbstractTableModel>
class TableModel : public QAbstractTableModel {
public:
TableModel(QObject *parent = nullptr) : QAbstractTableModel(parent) {
connect(&timer, &QTimer::timeout, [=]() {
emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
});
timer.start(1000);
}
virtual int rowCount(QModelIndex const &index = QModelIndex()) const { return index.parent().isValid() ? 0 : 5; }
virtual int columnCount(QModelIndex const &index = QModelIndex()) const { return index.parent().isValid() ? 0 : 10; }
virtual QVariant data(QModelIndex const &index, int role = Qt::DisplayRole) const {
QVariant value;
if (index.isValid() && role == Qt::DisplayRole) {
value = QString("X %1; Y: %2").arg(qrand()).arg(qrand());
}
return value;
}
private:
QTimer timer;
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
TableModel model;
QTableView view;
view.setModel(&model);
view.show();
return a.exec();
}