- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 QTableView 和 QAbtractTableModel 子级的相应实例。
我惊讶地发现,如果我的表模型实例发出命名单个单元格的 dataChanged,Qt 框架将向我的表模型的::data() 成员函数发出大量调用。这些调用的行/列范围似乎覆盖了屏幕上的整个范围以及一些额外的范围。
这超出了我的预期。我本以为命名单个单元格的 dataChanged() 只会导致::data() 调用请求该单元格的数据。毕竟,这是我的表格模型所说的唯一已更改的单元格。但 Qt 框架似乎非常群居,会查询所有单元格。
我显然对 dataChanged() 信号的意图理解不够。
有没有一种方法可以告诉 QTableView 仅更新一个单元格和一个单元格,而不会将所有额外的信息发送到我的表格模型?
更新:包括代码示例这里的示例是 header 、源代码和用于创建表的代码块。对于我来说,该表显示有 12 列和 29 行。在最后的“issueEmit”调用之后,由于单个单元格的 dataChanged() 信号,::data 将被调用 1044 次。
// Declaration
#include <QAbstractTableModel>
class SimpleModel : public QAbstractTableModel
{
Q_OBJECT
private:
bool _post_emit;
public:
explicit SimpleModel(QObject *parent=0);
int rowCount(const QModelIndex &parent = QModelIndex()) const;
int columnCount(const QModelIndex &parent = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
void issueEmit();
};
// Implementation
#include <stdlib.h>
#include <stdio.h>
#include "simplemodel.h"
SimpleModel::SimpleModel(QObject *parent) : QAbstractTableModel(parent), _post_emit(false) { }
int SimpleModel::rowCount(const QModelIndex &parent) const {
return 100;
}
int SimpleModel::columnCount(const QModelIndex &parent) const {
return 100;
}
QVariant SimpleModel::data(const QModelIndex &index, int role) const {
if (role==Qt::DisplayRole) {
if (_post_emit) {
static unsigned s_calls=0;
s_calls++;
printf("Data calls: %d\n",s_calls);
}
return ((rand()%10000)/1000.00);
}
return QVariant();
}
void SimpleModel::issueEmit() {
_post_emit=true;
emit dataChanged(createIndex(1,1),createIndex(1,1));
}
// Usage
QTableView *table=new QTableView;
table->setMinimumSize(1200,900);
SimpleModel *model=new SimpleModel;
table->setModel(model);
table->show();
model->issueEmit();
最佳答案
QVariant QStandardItem::data ( int role = Qt::UserRole + 1 ) const [virtual]
返回给定角色的项目数据,如果没有该角色的数据,则返回无效的 QVariant。
<小时/>这里的争论确实很有趣。模型中的每个项目都包含多个 QVariants,这些 QVariants 维护有关该项目的不同信息。
这些变体都被分配了 roles 。每当您发出数据发生更改时,模型都必须重新绘制该项目。要重新绘制项目,它必须查看许多不同的数据(下面包含小摘录)
描述外观和元数据的角色(具有关联的类型):
常数值说明
Qt::FontRole 6 用于使用默认委托(delegate)渲染的项目的字体。 (Q字体)
Qt::TextAlignmentRole 7 使用默认委托(delegate)呈现的项目的文本对齐方式。 (Qt::AlignmentFlag)
Qt::BackgroundRole 8 用于使用默认委托(delegate)渲染的项目的背景画笔。 (QBrush)
关于qt - 发出 dataChanged(createIndex(1,1),createIndex(1,1)) 会导致许多::data 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9844242/
我有一个 QTableView 和 QAbtractTableModel 子级的相应实例。 我惊讶地发现,如果我的表模型实例发出命名单个单元格的 dataChanged,Qt 框架将向我的表模型的::
任何人都知道如何创建一个索引,其中术语是一个 ref 并且可以通过数组中的嵌套对象进行搜索? 在“对话”集合中,我保存了以下示例数据: { "created": Time("2019-09-29T
我正在尝试将 Liquibase 用于我们的项目。我们主要使用 Oracle 数据库,其他一些数据库较少使用。我试图弄清楚如何在索引的情况下指定列顺序。下面是一个典型的创建索引更改集。
createIndex = true不会使用spring-data-elasticsearch在Elasticsearch中创建索引映射 @Document(indexName = "profiles
回答这个问题:Postgres table constraint using group-by ,我正在尝试将以下 Postgres 代码翻译成 liquibase XML create unique
我正在尝试将 Elasticsearch for GO 与这个著名的 repo 结合使用 但是,当我尝试创建一个 index(docs,并作为示例给出 here)时: // Define an
所以我正在使用 TypeScript 构建一个 express 服务器,使用 mongoose 与 MongoDB Atlas 交互。最近我决定在我的应用程序中使用多个数据库并更改我的架构以适应这种新
我正在使用 Ionic 3、Angular 4、Pouchdb、Pouchdb-find Pouchdb 工作正常。 我已经通过 npm 安装了 pouchdb 和 pouchdb-find 重现步骤
为了这个问题的目的,我有两个业务类: @Entity @Indexed public class MyClassOne implements MyInterface { @Id pri
我正在为几千兆位的文档创建索引。 在我的 mongo shell 中,我运行了这个命令: db.positions.createIndex( { "imei": 1, "server_date": -
我有一个包含时间类型字段的集合。我需要能够按年或月-年组合查询此集合。 我曾尝试在网站本身上使用索引创建工具,例如 Year(data.expDate)和 Month(data.expDate)在条款
当子类化 QAbstractTableModel 时,获取给定行和列的 QModelIndex 的正确方法是什么(例如,提供便捷方法 data(int row, int column))? 有inde
我正在尝试创建一个代理模型来动态映射来自源模型的项目。 在 QIdentityProxyModel 的实现之后,我发现实际上不可能通过检查 4 个核心函数来复制它: mapFromSource() m
我只是想创建一个像这样的基本索引 currentDB.createIndex({ index: { fields: ['name'] } }).then((result
所以我尝试在我的 messageSchema 中创建索引 var messageSchema = new Schema({ senderName : String, conte
在 createIndex 的文档中,他们说 db.collection.createIndex(keys, options) 所以我调用 createIndex()下面的代码。我的数据库名称是 ar
我一直在阅读 MDN,但我得到了 stuff like : keyPath The key path for the index to use. Note that it is possible to
我想为一个mongodb集合创建主键,看教程时,下面的东西总是没有解释。 mongodb的“createIndex”参数值是什么意思? 例如,在 https://www.sitepoint.com/7
是否可以使用 EF Code First 迁移的 CreateIndex 语法来创建覆盖索引(*请参阅下文了解覆盖索引是什么)。 例如,我可以像这样在手动迁移中创建一个简单的索引: CreateInd
在我的购物车 Controller 中,我有以下代码段: const Cart = require('mongoose').model('Cart'); 这有效: cart = await Cart.
我是一名优秀的程序员,十分优秀!