QTableWidget :: itemAt()返回看似随机的项目

时间:2010-06-06 13:18:18

标签: c++ qt qt4 qtablewidget

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

2 个答案:

答案 0 :(得分:5)

Qt文件说:

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

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

另见item()。

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

答案 1 :(得分:1)

看起来你的表按照第0列(“Foo,Bar,...”)列进行排序。那样的'Q'uux在9岁之前,在Waldo有道理之前。在第0列插入数字或禁用排序或我认为你明白了。有很多解决方案。