[Qt-interest] QTableView does not update view with new values

Matthias Pospiech matthias.pospiech at gmx.de
Tue Sep 1 15:51:17 CEST 2009


I habe a QTableView which I can fill once with data.
Every further time nothing in the view happens anymore, though the same 
code is executed.

Here the code:

void widgetCouplerVariationList::updateModelList()
{

    size_t size = VariationList->size();
    if (size > 0)
    {
        updateDelegates();

        double length = 0;

        modelVariationList->blockSignals(true);
        // modelVariationList->clear();
        modelVariationList->setRowCount(size);
        modelVariationList->setColumnCount(6);
       
        int column = 0;
       
        QStandardItem *item;
        item = new QStandardItem(QString("lines"));        
modelVariationList->setHorizontalHeaderItem(column, item); column++;   
        item = new QStandardItem(QString("period"));     
modelVariationList->setHorizontalHeaderItem(column, item); column++;   
        item = new QStandardItem(QString("graylevel"));    
modelVariationList->setHorizontalHeaderItem(column, item); column++;   
        item = new QStandardItem(QString("chirp"));        
modelVariationList->setHorizontalHeaderItem(column, item); column++;   
        item = new QStandardItem(QString("delay"));        
modelVariationList->setHorizontalHeaderItem(column, item); column++;   
        item = new QStandardItem(QString("length"));    
modelVariationList->setHorizontalHeaderItem(column, item); column++;   

        
tableViewVariation->verticalHeader()->setDefaultSectionSize(tableViewVariation->verticalHeader()->minimumSectionSize()+2);

        for (int i = 0; i < (int)size ; i++)
        {

            double velocity = CouplerSettings.Velocity();
            double chirp = (*VariationList)[i].chirp * 1e3;
            double delay = (*VariationList)[i].delay;
            double phase = (*VariationList)[i].phase;
            length = length + velocity*delay*1e-3;
           
            int column = 0;

            QStandardItem *newItem;
            newItem = new 
QStandardItem(QString("%L1").arg((*VariationList)[i].powerIndex + 1));
            modelVariationList->setItem(i, column, newItem); column++;

            newItem = new 
QStandardItem(QString("%L1").arg((*VariationList)[i].period,0,'f',3));
            modelVariationList->setItem(i, column, newItem); column++;

            newItem = new QStandardItem(QString("%L1").arg(int(phase)));
            modelVariationList->setItem(i, column, newItem); column++;

            newItem = new QStandardItem(QString("%L1").arg(chirp,0,'f',4));
            modelVariationList->setItem(i, column, newItem); column++;

            newItem = new QStandardItem(QString("%L1").arg(delay,0,'f',3));
            modelVariationList->setItem(i, column, newItem); column++;

            newItem = new QStandardItem(QString("%L1").arg(length,0,'f',3));
            modelVariationList->setItem(i, column, newItem); column++;


        }
        tableViewVariation->setModel(modelVariationList);
        modelVariationList->blockSignals(false);
    }
}


In the first run the length of the VariationList is 1, in the second 
time it is 1000 elements long.

Any idea? In this state I can not use the table anymore.

Matthias

The updateDelegates() is the following, in case this might cause the 
problem:

void widgetCouplerVariationList::updateDelegates()
{
    // lines
    DoubleSpinBoxDelegate * delegateSpinBox;
    delegateSpinBox = new DoubleSpinBoxDelegate(this) ;
    delegateSpinBox->setEditor(new QDoubleSpinBox(this));
    delegateSpinBox->Editor()->setRange(1,3);
    delegateSpinBox->Editor()->setDecimals(0);
    delegateSpinBox->Editor()->setSingleStep(1);
    tableViewVariation->setItemDelegateForColumn(0,delegateSpinBox);

    // period
    delegateSpinBox = new DoubleSpinBoxDelegate(this) ;
    delegateSpinBox->setEditor(new QDoubleSpinBox(this));
    delegateSpinBox->setLocalLanguage(QLocale::German);
    delegateSpinBox->Editor()->setRange(0,4000);
    delegateSpinBox->Editor()->setDecimals(3);
    delegateSpinBox->Editor()->setSingleStep(1);
    tableViewVariation->setItemDelegateForColumn(1,delegateSpinBox);

    // graylevel
    delegateSpinBox = new DoubleSpinBoxDelegate(this) ;
    delegateSpinBox->setEditor(new QDoubleSpinBox(this));
    delegateSpinBox->setLocalLanguage(QLocale::German);
    delegateSpinBox->Editor()->setRange(0,255);
    delegateSpinBox->Editor()->setDecimals(0);
    delegateSpinBox->Editor()->setSingleStep(1);
    tableViewVariation->setItemDelegateForColumn(2,delegateSpinBox);

    // chirp
    delegateSpinBox = new DoubleSpinBoxDelegate(this) ;
    delegateSpinBox->setEditor(new QDoubleSpinBox(this));
    delegateSpinBox->setLocalLanguage(QLocale::German);
    delegateSpinBox->Editor()->setRange(0,4);
    delegateSpinBox->Editor()->setDecimals(4);
    delegateSpinBox->Editor()->setSingleStep(0.01);
    tableViewVariation->setItemDelegateForColumn(3,delegateSpinBox);

    // delay
    delegateSpinBox = new DoubleSpinBoxDelegate(this) ;
    delegateSpinBox->setEditor(new QDoubleSpinBox(this));
    delegateSpinBox->setLocalLanguage(QLocale::German);
    delegateSpinBox->Editor()->setRange(10,20e7);
    delegateSpinBox->Editor()->setDecimals(3);
    delegateSpinBox->Editor()->setSingleStep(1);
    tableViewVariation->setItemDelegateForColumn(4,delegateSpinBox);

    // length
    delegateSpinBox = new DoubleSpinBoxDelegate(this) ;
    delegateSpinBox->setEditor(new QDoubleSpinBox(this));
    delegateSpinBox->setLocalLanguage(QLocale::German);
    delegateSpinBox->Editor()->setRange(0,20e7);
    delegateSpinBox->Editor()->setDecimals(3);
    delegateSpinBox->Editor()->setSingleStep(0.1);
    tableViewVariation->setItemDelegateForColumn(5,delegateSpinBox);
}



More information about the Qt-interest-old mailing list