QTableWidget problem
-
hi ich hab ein QTableWidget mit 5 spalten und 10 - 15 einträgen is immer unterschiedlich
die tabelle erstell ich mim designer und nacher setz ich noch paar einstellungen
void setTableSettings(QTableWidget *table, QStringList headers, bool selection /*= true*/, bool sorting /* = true */) { table->setColumnCount(headers.size()); table->setHorizontalHeaderLabels(headers); table->horizontalHeader()->setHidden(false); table->verticalHeader()->hide(); table->horizontalHeader()->setStretchLastSection( true ); table->setAlternatingRowColors(true); table->setSortingEnabled(sorting); table->setTabKeyNavigation(false); if(selection) { table->setSelectionMode(QAbstractItemView::SingleSelection); table->setSelectionBehavior(QAbstractItemView::SelectRows); } else table->setSelectionMode(QAbstractItemView::NoSelection); }
durch einen timer der alle 3 sek tikt aktualisier ich die tabelle und beim ersten timeout werden die ersten zwei spalten komplett mit werten aktualisiert aber die anderen spalten bleiben weiterhin leer.
Außer die letzten 2-3 Einträge die haben ab und zu auch paar einträge.
erst beim zweiten timeout werden die einträge aktualisiert ...
hat jemand eine ahnung woran das liegen könnte?
-
hier ist noch die routine die nach allen 3 sek aufgerufen wird
QList<DeviceModel> models = m_server->getDeviceModels(); for(int i = 0;i < models.count();i++) { QString mac = models.at(i).getMac().toString(":"); QString ip = models.at(i).getIp().toString(); QString firmware = models.at(i).getFirmware(); QString date = models.at(i).getVersionDate().toString(); QString hwName = models.at(i).getHwName(); if(mac.isEmpty() || ip.isEmpty() || firmware.isEmpty() || hwName.isEmpty()) continue; QList<QTableWidgetItem*> items = ui->webservers->findItems(models.at(i).getMac().toString(":"), Qt::MatchExactly); if(!items.count()) { // wenn noch nich in der liste dann einfügen int row = ui->webservers->rowCount(); ui->webservers->insertRow(row); ui->webservers->setRowHeight(row, TABLE_ROW_HEIGHT); QTableWidgetItem *item = new QTableWidgetItem(QIcon(":/icon/images/index.png"), QString()); item->setFlags(item->flags() & (~Qt::ItemIsEditable)); item->setToolTip(tr("Startseite öffnen")); ui->webservers->setItem(row, COL_INDEX, item); if(m_parameter->m_expert) { item = new QTableWidgetItem(QIcon(":/icon/images/config.png"), QString()); item->setFlags(item->flags() & (~Qt::ItemIsEditable)); item->setToolTip(tr("Config öffnen")); ui->webservers->setItem(row, COL_CONFIG, item); } item = new QTableWidgetItem(mac); // mac item->setFlags(item->flags() & (~Qt::ItemIsEditable)); ui->webservers->setItem(row, COL_SERIAL, item); item = new QTableWidgetItem(ip); item->setFlags(item->flags() & (~Qt::ItemIsEditable)); ui->webservers->setItem(row, COL_IP, item); item = new QTableWidgetItem(hwName +" "+ firmware + date); item->setFlags(item->flags() & (~Qt::ItemIsEditable)); ui->webservers->setItem(row, COL_VERSION, item); } else { // ansonsten werte aktualisieren QString serial = models.at(i).getMac().toString(":"); for(int n = 0;n < ui->webservers->rowCount();n++) { if(ui->webservers->item(n, COL_SERIAL) != NULL) { if(serial == ui->webservers->item(n, COL_SERIAL)->text()) { QTableWidgetItem *item = new QTableWidgetItem(models.at(i).getIp().toString()); item->setFlags(item->flags() & (~Qt::ItemIsEditable)); ui->webservers->setItem(n, COL_IP, item); item = new QTableWidgetItem(models.at(i).getHwName() +" "+ models.at(i).getFirmware() + models.at(i).getVersionDate().toString()); item->setFlags(item->flags() & (~Qt::ItemIsEditable)); ui->webservers->setItem(n, COL_VERSION, item); } } } } } for(int i = 0;i < ui->webservers->rowCount();i++) { if(ui->webservers->item(i, COL_SERIAL)->text() == m_parameter->m_mac.toString(":")) { ui->webservers->setCurrentCell(i, COL_SERIAL); break; } }
-
hab den fehler gefunden:
table->setSortingEnabled(sorting);
dadurch werden net alle Items beim ersten mal eingetragen k.a warum oO