arunvv
7th May 2008, 19:32
Hi
I am having a problem with QTableWidgetItem.
I created a table (2 rows, 11 columns) using QTableWidget.
I have 2 functions, firstRowUpdate() and secondRowUpdate();
When I am only using firstRowUpdate() function it works fine and updates the firstRow & its 11 columns.
But I use secondRowUpdate() along with firstRowUpdate() function it overwrites the firstRowUpdate values in firstRow with secondRowUpdate function values.
Both rows shows same values.
Both the functions are similar in coding, except setting items with different values or strings to display, in firstRowUpdate() and secondRowUpdate() functions.
What could be causing the problem, when i try to update both rows simultaneously.
Thanks & Regards,
Arun
arunvv
7th May 2008, 19:46
Forgot to add a snippet of code:
void MainWindow::createTable()
{
tableWidget_wmhData->setRowCount(2);
tableWidget_wmhData->setColumnCount(11);
tableWidget_wmhData->setHorizontalHeaderLabels(QStringList() << tr(" Vehicle ID ") << tr(" UTC Time ") << tr(" Latitude ") << tr(" Longitude ") << tr(" VehSpd ") << tr(" Heading ") << tr("X-Accel") << tr("YawRate") << tr("BrkSts") << tr("Sequence#") << tr("Event"));
tableWidget_wmhData->resizeColumnsToContents();
}
void MainWindow::firstRowUpdate()
{
char hostVehID[6], hostUTCTimeStr[20];
memset(&wmhHVData, 0, sizeof(wmhHVData));
if(!get_wmh_hv_data( &shmPtr->wmh_data, &wmhHVData, NULL))
{
printf("EGUI-WMH: Host Vehicle Data Error\n");
return;
}
else
{
sprintf(hostVehID, "%02x:%02x:%02x:%02x:%02x:%02x", wmhHVData.ota.basicMsg.tempId[0],
wmhHVData.ota.basicMsg.tempId[1], wmhHVData.ota.basicMsg.tempId[2], wmhHVData.ota.basicMsg.tempId[3], wmhHVData.ota.basicMsg.tempId[4], wmhHVData.ota.basicMsg.tempId[5]);
HostVehIDRow->setText("1");
printf("HostVehID: %s \n", hostVehID);
Q_hostVehID = (const char *)hostVehID;
wmhVehID->setText(Q_hostVehID);
tableWidget_wmhData->setItem(0, 0, wmhVehID);
epo_ms_to_time_str(hostUTCTimeStr, sizeof(hostUTCTimeStr), v_gettime(NULL));
Q_wmhUTCTime = (const char *)hostUTCTimeStr;
wmhUTCTime->setText(Q_wmhUTCTime);
tableWidget_wmhData->setItem(0, 1, wmhUTCTime);
wmhLatitude->setText(Q_wmhLatitude.setNum(wmhHVData.ota.basicMs g.latitude, 'f', 6));
tableWidget_wmhData->setItem(0, 2, wmhLatitude);
wmhLongitude->setText(Q_wmhLongitude.setNum(wmhHVData.ota.basicM sg.longitude, 'f', 6));
tableWidget_wmhData->setItem(0, 3, wmhLongitude);
wmhVehSpd->setText(Q_wmhVehSpd.setNum(wmhHVData.ota.basicMsg. canData.vehSpeed, 'f', 6));
tableWidget_wmhData->setItem(0, 4, wmhVehSpd);
wmhHeading->setText(Q_wmhHeading.setNum(wmhHVData.ota.basicMsg .heading, 'f', 6));
tableWidget_wmhData->setItem(0, 5, wmhHeading);
wmhXAccel->setText(Q_wmhXAccel.setNum(wmhHVData.ota.basicMsg. canData.latAccel));
tableWidget_wmhData->setItem(0, 6, wmhXAccel);
wmhYawRate->setText(Q_wmhYawRate.setNum(wmhHVData.ota.basicMsg .canData.yawRate));
tableWidget_wmhData->setItem(0, 7, wmhYawRate);
wmhBrkSts->setText(Q_wmhBrkSts.setNum(wmhHVData.ota.basicMsg. canData.brakeActive));
tableWidget_wmhData->setItem(0, 8, wmhBrkSts);
wmhSeqNum->setText(Q_wmhSeqNum.setNum(wmhHVData.ota.msgSequen ceNum));
tableWidget_wmhData->setItem(0, 9, wmhSeqNum);
wmhEvent->setText(Q_wmhEvent.setNum(wmhHVData.ota.vehicleEve nt));
tableWidget_wmhData->setItem(0, 10, wmhEvent);
}
}
void MainWindow::secondRowUpdate()
{
char remoteVehID[6], remoteUTCTimeStr[20];
bool remoteVeh;
for ( remoteVeh = get_first_wmh_rv_data( &shmPtr->wmh_data, shmPtr->wmh_rv_data, &wmhRVData );
(remoteVeh);
remoteVeh = get_next_wmh_rv_data( &shmPtr->wmh_data, shmPtr->wmh_rv_data, &wmhRVData, &wmhRVData ))
{
sprintf(remoteVehID, "%02x:%02x:%02x:%02x:%02x:%02x", wmhRVData.ota.basicMsg.tempId[0],
wmhRVData.ota.basicMsg.tempId[1], wmhRVData.ota.basicMsg.tempId[2],
wmhRVData.ota.basicMsg.tempId[3], wmhRVData.ota.basicMsg.tempId[4],
wmhRVData.ota.basicMsg.tempId[5]);
printf("remoteVeh Boolean Value: %d, RemoteVehID: %s\n", remoteVeh, remoteVehID);
Q_remoteVehID = (const char *)remoteVehID;
qDebug() << "Qt Has RemoteID as: " << Q_remoteVehID << endl;
wmhVehID->setText(Q_remoteVehID);
tableWidget_wmhData->setItem(1, 0 , wmhVehID);
epo_ms_to_time_str(remoteUTCTimeStr, sizeof(remoteUTCTimeStr), v_gettime(NULL));
Q_wmhUTCTime = (const char *)remoteUTCTimeStr;
wmhUTCTime->setText(Q_wmhUTCTime);
tableWidget_wmhData->setItem(1, 1, wmhUTCTime);
wmhLatitude->setText(Q_wmhLatitude.setNum(wmhRVData.ota.basicMs g.latitude, 'f', 6));
tableWidget_wmhData->setItem(1, 2, wmhLatitude);
wmhLongitude->setText(Q_wmhLongitude.setNum(wmhRVData.ota.basicM sg.longitude, 'f', 6));
tableWidget_wmhData->setItem(1, 3, wmhLongitude);
wmhVehSpd->setText(Q_wmhVehSpd.setNum(wmhRVData.ota.basicMsg. canData.vehSpeed, 'f', 6));
tableWidget_wmhData->setItem(1, 4, wmhVehSpd);
wmhHeading->setText(Q_wmhHeading.setNum(wmhRVData.ota.basicMsg .heading, 'f', 6));
tableWidget_wmhData->setItem(1, 5, wmhHeading);
wmhXAccel->setText(Q_wmhXAccel.setNum(wmhRVData.ota.basicMsg. canData.latAccel));
tableWidget_wmhData->setItem(1, 6, wmhXAccel);
wmhYawRate->setText(Q_wmhYawRate.setNum(wmhRVData.ota.basicMsg .canData.yawRate));
tableWidget_wmhData->setItem(1, 7, wmhYawRate);
wmhBrkSts->setText(Q_wmhBrkSts.setNum(wmhRVData.ota.basicMsg. canData.brakeActive));
tableWidget_wmhData->setItem(1, 8, wmhBrkSts);
wmhSeqNum->setText(Q_wmhSeqNum.setNum(wmhRVData.ota.msgSequen ceNum));
tableWidget_wmhData->setItem(1, 9, wmhSeqNum);
wmhEvent->setText(Q_wmhEvent.setNum(wmhRVData.ota.vehicleEve nt));
tableWidget_wmhData->setItem(1, 10, wmhEvent);
}
}
/* Starts Timer twice a second*/
void MainWindow::startEGUIDataTimer()
{
eguiDisplayTimer = new QTimer();
connect(eguiDisplayTimer, SIGNAL(timeout()), this, SLOT(printData()));
eguiDisplayTimer->start(500);
}
void MainWindow::printData()
{
fisrtRowUpdate();
memset(&wmhRVData, 0, sizeof(wmhRVData));
remoteVehCount = get_wmh_rv_num(&shmPtr->wmh_data); //Collecting Remote Vehicles Count
printf("Remote Veh Count: %d\n", remoteVehCount);
if(remoteVehCount > 0)
{
secondRowUpdate();
}
}
This is what I am doing, what i am doing wrong, when i use secondRowUpdate() it displays same in both rows, if I use only firstRowUpdate() it works fine.
Thanks & Regards,
Arun
arunvv
9th May 2008, 01:04
I found out what the problem is,
The problem is with usage of same QWidgetTableItems for both the rows.
Now if I change with different QWidgetTableItems I am getting correct values, in each row.
But I have one more problem, i have one more table which has 20rows and 10 columns.
For 20rows and 10 columns , i need to create 200 QTableWidgetItems with different variables.
How can i create 200 QTableWidgetItems, in a simpler or best way.
Thanks & Regards,
Arun
vBulletin® v3.7.1, Copyright ©2000-2008, Jelsoft Enterprises Ltd.