2

我刚开始使用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”。难道我做错了什么?

4

2 回答 2

6

Qt 文档 说:

QTableWidgetItem * QTableWidget::itemAt ( int ax, int ay ) const

返回表格部件坐标系中相当于 QPoint(ax, ay) 位置的项目,如果指定的点未被表格部件中的项目覆盖,则返回 0。

另见项目()。

所以你可能应该使用 item(row, column) 代替: ui->lblCurrentCell->setText(ui->tableTest->item(current->row(), current->column())->text());

于 2010-06-06T14:03:16.960 回答
1

看起来您的表格正在按照第 0 列(“Foo, Bar, ...”)进行排序。这样一来,'Q'uux 在 9 岁时,沃尔多才有意义。在第 0 列插入数字或禁用排序,或者我认为你明白了。有很多解决方案。

于 2010-06-06T13:42:12.310 回答