Russian Qt Forum

Qt => Model-View (MV) => Тема начата: galilley от Июнь 21, 2010, 09:24



Название: QTableView: не обновляется нулевая строка
Отправлено: galilley от Июнь 21, 2010, 09:24
Доброго времени!
Заметил вот такую багу - не обновляется нулевая строка в модели.
Все классы стандартные.
Модель создаю вот так:

model = new QStandardItemModel(0, 4, this);
tableView->setModel(model);

Новые строки добавляю по количеству необходимых элементов вот так:
model->appendRow( new QStandardItem);

Данные вставляю через item()->setData():
model->item( 0, 1)->setData( QVariant(QTime::currentTime()), Qt::DisplayRole);

Обновление виджета происходит только после того, как он попадает под фокус. update(), repaint() не помогают, хотя в тоже время строчка вида:
model->item( 1, 1)->setData( QVariant(QTime::currentTime()), Qt::DisplayRole);
проходит отлично.

Спасибо.

Alt Linux/Qt 4.5.3.


Название: Re: QTableView: не обновляется нулевая строка
Отправлено: crossly от Июнь 21, 2010, 09:37
Qt::EditRole ??


Название: Re: QTableView: не обновляется нулевая строка
Отправлено: galilley от Июнь 21, 2010, 10:02
model->item( 0, 1)->setData( QVariant(QTime::currentTime()), Qt::EditRole);
Результат аналогичный.

upd: к столбцу привязан делегат на виджет QTimeEdit, все изменения в делегате сразу уходят в модель, emitCommitData переопределён.


Название: Re: QTableView: не обновляется нулевая строка
Отправлено: Karl-Philipp от Июнь 21, 2010, 10:09
model->item( 0, 1)->setData( QVariant(QTime::currentTime()), Qt::EditRole);
Результат аналогичный.

upd: к столбцу привязан делегат на виджет QTimeEdit, все изменения в делегате сразу уходят в модель, emitCommitData переопределён.
emitCommitData - похоже на сигнал.
1. Где вы его нашли?
2. Разве можно переопределять сигналы???


Название: Re: QTableView: не обновляется нулевая строка
Отправлено: galilley от Июнь 21, 2010, 10:13
точно, вру.
Это слот, причём не переопределённый, выглядит вот так:
Код:
void TimeEditDelegate::emitCommitData()
{
emit commitData(qobject_cast<QWidget *>(sender()));
}

Стянул из какого-то примера о делегатах.. но дело не в нём, с отключенным делегатом тот же эффект.


Название: Re: QTableView: не обновляется нулевая строка
Отправлено: galilley от Июнь 21, 2010, 12:48
upd: замечено, что при добавлении новых строчек во время работы приложения такого эффекта не наблюдается.
Может это связано с тем, что добавление строчек в модель происходит тогда, когда виджет ещё только создан, а окно, к котором он находится ещё не привязано ни к какому layout-у, и show() ещё не вызывалось...


Название: Re: QTableView: не обновляется нулевая строка
Отправлено: galilley от Июль 01, 2010, 08:18
Проблема всё ещё актуальна.
Пробую воспроизвести её в каком-нить простом примере с минимальным количеством кода - не воспроизводится :(
Может кто-то всё-таки сталкивался?


Название: Re: QTableView: не обновляется нулевая строка
Отправлено: galilley от Июль 19, 2010, 22:06
Есть, установлены условия, при которых это возникает.
Весь сырбор из-за того, что мне захотелось сделать размер строк поменьше.
Вылилось это в строчку:
tv->verticalHeader()->setDefaultSectionSize(22);
если я 22 меняю на, скажем, 34 то всё обновляется отлично!
Более того, если этот самый verticalHeader видимый и его размер можно изменять, то бага также проявляется, если вручную задать слишком маленький размер.
Иллюстрация в приложении.
Вопрос, как с этим бороться и куда писать?
Как уменьшить вертикальный размер строк без таких странных последствий.