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 中调用挂起函数返回多个返回值 | 协程中调用挂起函数返回集合 )

使用fiddler修改返回值以及返回状态码

Android开发如何点击物理返回键返回上个界面

Javascript:嵌套返回语句,返回内部返回

Android——关于Activity跳转的返回(无返回值和有返回值)——无返回值

JAVA里的函数返回值,可以返回几个?