Russian Qt Forum
Ноябрь 24, 2024, 07:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableView: не обновляется нулевая строка  (Прочитано 4806 раз)
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.
Записан
crossly
Гость
« Ответ #1 : Июнь 21, 2010, 09:37 »

Qt::EditRole ??
Записан
galilley
Гость
« Ответ #2 : Июнь 21, 2010, 10:02 »

model->item( 0, 1)->setData( QVariant(QTime::currentTime()), Qt::EditRole);
Результат аналогичный.

upd: к столбцу привязан делегат на виджет QTimeEdit, все изменения в делегате сразу уходят в модель, emitCommitData переопределён.
Записан
Karl-Philipp
Гость
« Ответ #3 : Июнь 21, 2010, 10:09 »

model->item( 0, 1)->setData( QVariant(QTime::currentTime()), Qt::EditRole);
Результат аналогичный.

upd: к столбцу привязан делегат на виджет QTimeEdit, все изменения в делегате сразу уходят в модель, emitCommitData переопределён.
emitCommitData - похоже на сигнал.
1. Где вы его нашли?
2. Разве можно переопределять сигналы???
Записан
galilley
Гость
« Ответ #4 : Июнь 21, 2010, 10:13 »

точно, вру.
Это слот, причём не переопределённый, выглядит вот так:
Код:
void TimeEditDelegate::emitCommitData()
{
emit commitData(qobject_cast<QWidget *>(sender()));
}

Стянул из какого-то примера о делегатах.. но дело не в нём, с отключенным делегатом тот же эффект.
Записан
galilley
Гость
« Ответ #5 : Июнь 21, 2010, 12:48 »

upd: замечено, что при добавлении новых строчек во время работы приложения такого эффекта не наблюдается.
Может это связано с тем, что добавление строчек в модель происходит тогда, когда виджет ещё только создан, а окно, к котором он находится ещё не привязано ни к какому layout-у, и show() ещё не вызывалось...
Записан
galilley
Гость
« Ответ #6 : Июль 01, 2010, 08:18 »

Проблема всё ещё актуальна.
Пробую воспроизвести её в каком-нить простом примере с минимальным количеством кода - не воспроизводится Грустный
Может кто-то всё-таки сталкивался?
Записан
galilley
Гость
« Ответ #7 : Июль 19, 2010, 22:06 »

Есть, установлены условия, при которых это возникает.
Весь сырбор из-за того, что мне захотелось сделать размер строк поменьше.
Вылилось это в строчку:
tv->verticalHeader()->setDefaultSectionSize(22);
если я 22 меняю на, скажем, 34 то всё обновляется отлично!
Более того, если этот самый verticalHeader видимый и его размер можно изменять, то бага также проявляется, если вручную задать слишком маленький размер.
Иллюстрация в приложении.
Вопрос, как с этим бороться и куда писать?
Как уменьшить вертикальный размер строк без таких странных последствий.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 20.