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 y ) const

テーブル ウィジェットの座標系で QPoint(ax, y) に相当する位置にあるアイテムを返すか、指定されたポイントがテーブル ウィジェットのアイテムに含まれていない場合は 0 を返します。

item() も参照してください。

したがって、代わりに item(row, column) を使用する必要があります。

于 2010-06-06T14:03:16.960 に答える
1

テーブルが 0 番目 ("Foo, Bar, ...") の列に従って並べ替えられているようです。そうすれば 'Q'uux が 9 になり、Waldo が意味をなす前に。0番目の列に数字を挿入するか、並べ替えを無効にするか、要点を得たと思います。多くの解決策があります。

于 2010-06-06T13:42:12.310 に答える