使用新值更新 QTableView 中的单元格
我是新人,我正在学习用 Qt 编程,我的英语不是很好,我的问题是,当我更新 QTableView 中的单元格以使用其在另一个单元格中的值时,它使用以前的值而不是新的值,我向他们展示了我正在做的代码,谢谢。
bool MainWindow::eventFilter(QObject * watched, QEvent * event)
{
if(event->type() == QEvent::KeyPress)
{
QKeyEvent *ke = static_cast<QKeyEvent *>(event);
qDebug() << ke->type();
if(ke->key() == Qt::Key_Enter || ke->key() == Qt::Key_Return)
{
int fila = ui->tableView->currentIndex().row();
int col = ui->tableView->currentIndex().column();
double valor1 = ui->tableView->model()->data(ui->tableView->model()->index(fila,1)).toDouble();
double valor2 = ui->tableView->model()->data(ui->tableView->model()->index(fila,3)).toDouble();
if(col == 1 || col == 3)
{
ui->tableView->model()->setData(ui->tableView->model()->index(fila,col + 1),2.0*valor1);
ui->tableView->model()->setData(ui->tableView->model()->index(fila,col + 3),200.0*valor1/valor2);
}
}
}
return false;
}
I'm new, I'm learning to program in Qt and my English is not very good, my problem is that when I update a cell in a QTableView to use its value in another cell, it uses the previous value and not the new, I show them the code as I am doing, thanks.
bool MainWindow::eventFilter(QObject * watched, QEvent * event)
{
if(event->type() == QEvent::KeyPress)
{
QKeyEvent *ke = static_cast<QKeyEvent *>(event);
qDebug() << ke->type();
if(ke->key() == Qt::Key_Enter || ke->key() == Qt::Key_Return)
{
int fila = ui->tableView->currentIndex().row();
int col = ui->tableView->currentIndex().column();
double valor1 = ui->tableView->model()->data(ui->tableView->model()->index(fila,1)).toDouble();
double valor2 = ui->tableView->model()->data(ui->tableView->model()->index(fila,3)).toDouble();
if(col == 1 || col == 3)
{
ui->tableView->model()->setData(ui->tableView->model()->index(fila,col + 1),2.0*valor1);
ui->tableView->model()->setData(ui->tableView->model()->index(fila,col + 3),200.0*valor1/valor2);
}
}
}
return false;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您位于自定义数据模型中(可能继承自
QAbstractTableModel
,因为我们正在讨论QTableView
),您可以通知视图数据已发生更改通过发出 QAbstractItemModel::dataChanged() 信号。我是这样做的。
更新整行:
更新整列,但仅更新 Qt::DecorationRole:
通过向项目模型添加 UpdateRow(row) 和 UpdateColumn(column) 等便捷函数,您可以从模型本身外部调用这些函数,如果您从外部更改数据。
您不想告诉视图自行更新 - 如果有多个视图查看同一模型怎么办?让模型通知所有附加视图它已更改。
If you are inside a custom data model, (perhaps inheriting from
QAbstractTableModel
, since we're discussingQTableView
s), you can inform the view that a change of data has occurred by emitting the QAbstractItemModel::dataChanged() signal.Here's how I do it.
Updating an entire row:
Updating an entire column, but only the Qt::DecorationRole:
By adding convenience functions like UpdateRow(row) and UpdateColumn(column) to your item model, you can call those functions from outside of the model itself, if you change the data externally.
You don't want to tell a view to update itself - what if there are more than one view looking at the same model? Let the model to inform all the attached views that it has changed.
如果有人遇到同样的问题,这是我使用的代码。
这将更新依赖于已更新的另一个单元格的单元格值。
This is the code that I use if anyone had the same problem.
This will update the cell value that depends on another cell that has been updated.
由于以下几个原因,这似乎是一种非常愚蠢的方法:
This seems to be quite ditry approach to do this for several reasons: