【问题标题】:QTableWidget::itemAt() returns seemingly random itemsQTableWidget::itemAt() 返回看似随机的项目
【发布时间】: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”。我做错了吗?

【问题讨论】:

    标签: c++ qt qt4 qtablewidget


    【解决方案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。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 2014-12-10
    • 2010-09-28
    • 2010-12-24
    相关资源
    最近更新 更多