2010-06-06 100 views
1

我剛開始使用Qt,所以請耐心等待。當我使用QTableWidget-> getItemAt()時,如果使用currentItemChanged並單擊相同的項目,它將返回不同的項目。我相信有必要使用itemAt(),因爲我需要得到所點擊行的第一列。QTableWidget :: 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」。難道我做錯了什麼?

回答

5

的Qt documenration說:

QTableWidgetItem * QTableWidget的:: itemAt(INT斧頭,詮釋AY)常量

在同等位置QPoint(AX,AY)表格部件的座標系中返回該項目如果指定的點未被表格窗口小部件中的項目覆蓋,則返回0。

另請參閱項目()。所以你應該使用項目(行,列),而不是: ui-> lblCurrentCell-> setText(ui-> tableTest-> item(current-> row(),current-> column()) - >文本());

+2

itemAt()與item() – user110418 2010-06-06 14:12:22

+0

你說得對,看起來我用itemAt()的時候應該用過item()。我應該更徹底地閱讀文檔。謝謝您的幫助! – 2010-06-06 14:14:12

+0

我犯了同樣的錯誤。感謝您的澄清。 – 2010-11-10 17:48:05

1

看起來像你的表正在按照0(「Foo,Bar,...」)列進行排序。這樣''沃斯在9點之前,沃爾多有道理。要麼插入第0列的數字或禁用排序或我認爲你明白了。有很多解決方案。

+0

Jordon,你可以嘗試使用item(row,col)而不是itemAt。另請注意,Qt API將(行,列)作爲參數。您可以以其他方式使用它(列,行)。 HTH。 – sambha 2010-06-06 14:19:59