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


Anmelden zum Antworten