QTableWidget :: itemAt () restituisce oggetti apparentemente casuali
-
24-10-2019 - |
Domanda
Ho appena iniziato a utilizzare Qt, così si prega di portare con me. Quando uso QTableWidget-> getItemAt (), restituisce un elemento diverso da se ho usato currentItemChanged e cliccato lo stesso articolo. Credo che sia necessario utilizzare itemAt () in quanto ho bisogno di ottenere la prima colonna di qualsiasi riga è stata cliccato.
Qualche esempio di codice è qui sotto:
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());
}
Per l'oggetto a 1x9, visualizza lblCurrentItem "9" (come dovrebbe,) mentre visualizza lblCurrentCell "Quux". Sto facendo qualcosa di sbagliato?
Soluzione
Qt documenration dice:
* QTableWidgetItem QTableWidget :: itemAt (int ax, ay int) const
Restituisce la voce nella posizione equivalente a QPoint (ax, ay) nella tabella widget di di sistema di coordinate, o ritorna 0 se il punto specificato non è coperto da una voce nel widget tavolo.
Vedere anche il punto ().
Quindi, si dovrebbe probabilmente usare item (riga, colonna) invece: UI-> lblCurrentCell-> setText (UI-> tableTest-> item (current-> fila (), current-> colonna ()) -> testo ());
Altri suggerimenti
Sembra che il tuo tavolo è sempre ordinata come da 0a colonna ( "Foo, Bar, ..."). In questo modo 'Q'uux essere a 9, prima di Waldo ha un senso. O inserire i numeri in colonna 0 o disabilitare l'ordinamento o Penso che avete ottenuto il punto. Ci sono molte soluzioni.