[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