QTableWidget::itemAt() 返回看似随机的项目
Posted
技术标签:
【中文标题】QTableWidget::itemAt() 返回看似随机的项目【英文标题】:QTableWidget::itemAt() returns seemingly random items 【发布时间】:2010-06-06 13:18:18 【问题描述】:我刚刚开始使用 Qt,所以请多多包涵。当我使用 QTableWidget->getItemAt() 时,如果我使用 currentItemChanged 并单击同一个项目,它会返回一个不同的项目。我相信有必要使用 itemAt() 因为我需要获取单击的任何行的第一列。
一些示例代码如下:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
ui->setupUi(this);
QList<QString> rowContents;
rowContents << "Foo" << "Bar" << "Baz" << "Qux" << "Quux" << "Corge" << "Grault" << "Garply" << "Waldo" << "Fred";
for(int i =0; i < 10; ++i)
ui->tableTest->insertRow(i);
ui->tableTest->setItem(i, 0, new QTableWidgetItem(rowContents[i]));
ui->tableTest->setItem(i, 1, new QTableWidgetItem(QString::number(i)));
//...
void MainWindow::on_tableTest_currentItemChanged(QTableWidgetItem* current, QTableWidgetItem* previous)
ui->lblColumn->setText(QString::number(current->column()));
ui->lblRow->setText(QString::number(current->row()));
ui->lblCurrentItem->setText(current->text());
ui->lblCurrentCell->setText(ui->tableTest->itemAt(current->row(), current->column())->text());
对于 1x9 的项目,lblCurrentItem 显示“9”(应该如此),而 lblCurrentCell 显示“Quux”。我做错了吗?
【问题讨论】:
【参考方案1】:Qt 文档说:
QTableWidgetItem * QTableWidget::itemAt ( int ax, int ay ) const
返回表格控件坐标系中与 QPoint(ax, ay) 等效的位置的项目,如果指定的点未被表格控件中的项目覆盖,则返回 0。
另见 item()。
所以你应该使用 item(row, column) 代替: ui->lblCurrentCell->setText(ui->tableTest->item(current->row(), current->column())->text());
【讨论】:
你说得对,看起来我在应该使用 item() 的时候使用了 itemAt()。我应该更彻底地阅读文档。感谢您的帮助! 我犯了同样的错误。感谢您的澄清。【参考方案2】:看起来您的表格正在按照第 0 列(“Foo, Bar, ...”)进行排序。这样一来,'Q'uux 在 9 岁时,沃尔多才有意义。在第 0 列插入数字或禁用排序,或者我认为你明白了。有很多解决方案。
【讨论】:
Jordon,您可以尝试使用 item(row, col) 代替 itemAt。另请注意,Qt API 将 (row, column) 作为参数。您可以以另一种方式使用它 - (列,行)。 HTH。以上是关于QTableWidget::itemAt() 返回看似随机的项目的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 协程Flow 异步流 ① ( 以异步返回返回多个返回值 | 同步调用返回多个值的弊端 | 尝试在 sequence 中调用挂起函数返回多个返回值 | 协程中调用挂起函数返回集合 )