我刚刚开始使用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”。我做错了吗?
答案 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列插入数字或禁用排序或我认为你明白了。有很多解决方案。