QTableWidget :: itemAt () возвращает, казалось бы, случайные элементы - PullRequest
1 голос
/ 06 июня 2010

Я только начал использовать 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 ]

5 голосов
/ 06 июня 2010

Документация Qt гласит:

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

Возвращает элемент в позиции, эквивалентной QPoint (ax, ay) в системе координат виджета таблицы, или возвращает 0, если указанная точка не покрыта элементом в виджете таблицы.

См. Также пункт ().

Так что вы, вероятно, должны использовать элемент (строка, столбец) вместо: ui-> lblCurrentCell-> setText (ui-> tableTest-> item (current-> row (), current-> column ()) -> text ());

1 голос
/ 06 июня 2010

Похоже, ваша таблица сортируется по 0-му столбцу ("Foo, Bar, ..."). Таким образом, Q'uux в 9, прежде чем Уолдо имеет смысл. Либо вставьте числа в 0-м столбце, либо отключите сортировку, либо, я думаю, вы поняли смысл. Есть много решений.

...