Je travaille sur une application Windows, où dans une boîte de dialogue j'interroge certaines données de Postgres, et montre manuellement la sortie dans un widget de table.Qt: ItemAt() de TableWidget agissant bizarrement
m_ui->tableWidget->setRowCount(joinedData.count());
for(int i=0; i<joinedData.count(); i++) //for each row
{
m_ui->tableWidget->setItem(i, 0, new QTableWidgetItem(joinedData[i].bobin.referenceNumber));
m_ui->tableWidget->setItem(i, 1, new QTableWidgetItem(QString::number(joinedData[i].bobin.width)));
m_ui->tableWidget->setItem(i, 2, new QTableWidgetItem(QString::number(joinedData[i].tolerance.getHole())));
m_ui->tableWidget->setItem(i, 3, new QTableWidgetItem(QString::number(joinedData[i].tolerance.getLessThanZeroFive()))); m_ui->tableWidget->setItem(i, 4, new QTableWidgetItem(QString::number(joinedData[i].tolerance.getZeroFive_to_zeroSeven())));
m_ui->tableWidget->setItem(i, 5, new QTableWidgetItem(QString::number(joinedData[i].tolerance.getZeroFive_to_zeroSeven_repetitive())));
m_ui->tableWidget->setItem(i, 6, new QTableWidgetItem(QString::number(joinedData[i].tolerance.getZeroSeven_to_Three())));
m_ui->tableWidget->setItem(i, 7, new QTableWidgetItem(QString::number(joinedData[i].tolerance.getThree_to_five())));
m_ui->tableWidget->setItem(i, 8, new QTableWidgetItem(QString::number(joinedData[i].tolerance.getMoreThanFive())));
}
En outre, sur la base de la ligne et de colonne, je peins certains de ces tablewidgetitems à certaines couleurs, mais je ne pense pas que ce soit pertinent.
Je réimplémentées contextMenuEvent du QDialog, pour obtenir le droit cliqué sur la ligne de tableWidgetItem et la colonne Coordonnées:
void BobinFlanView::contextMenuEvent(QContextMenuEvent *event)
{
QMenu menu(m_ui->tableWidget);
//standard actions
menu.addAction(this->markInactiveAction);
menu.addAction(this->markActiveAction);
menu.addSeparator();
menu.addAction(this->exportAction);
menu.addAction(this->exportAllAction);
//obtain the rightClickedItem
QTableWidgetItem* clickedItem = m_ui->tableWidget->itemAt(m_ui->tableWidget->mapFromGlobal(event->globalPos()));
// if it's a colored one, add some more actions
if (clickedItem && clickedItem->column()>1 && clickedItem->row()>0)
{
//this is a property, i'm keeping this for a later use
this->lastRightClickedItem = clickedItem;
//debug purpose:
QMessageBox::information(this, "", QString("clickedItem = %1, %2").arg(clickedItem->row()).arg(clickedItem->column()));
QMessageBox::information(this, "", QString("globalClick = %1, %2\ntransformedPos = %3, %4").arg(event->globalX()).arg(event->globalY())
.arg(m_ui->tableWidget->mapFromGlobal(event->globalPos()).x()).arg(m_ui->tableWidget->mapFromGlobal(event->globalPos()).y()));
menu.addSeparator();
menu.addAction(this->changeSelectedToleranceToUygun);
menu.addAction(this->changeSelectedToleranceToUyar);
menu.addAction(this->changeSelectedToleranceToDurdurUyar);
//... some other irrevelant 'enable/disable' activities
menu.exec(event->globalPos());
}
Le problème est, quand je clique droit sur le même article que je reçois les mêmes coordonnées globales, mais au hasard différents informations sur les lignes et les colonnes. Par exemple, le pos global est exactement 600,230 mais la paire ligne-colonne est aléatoirement (5,3) et (4,3). Je veux dire quoi?!
Aussi, lorsque je clique sur un élément de la dernière aux lignes (au plus tard le 13, je suppose) ne sera jamais en état « si (clickedItem & & clickedItem-> colonne()> 1 & & clickedItem-> rangée()> 0) ", je pense que c'est principalement parce que 'clickedItem' est nul.
Je serai très heureux de partager plus d'informations, ou même le trio complet cpp-h-ui afin d'obtenir de l'aide.
Merci beaucoup.
merci un million:] cela fonctionne comme un charme. – emredog