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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не перерисовывать qtableview  (Прочитано 4167 раз)
Serjpiter
Гость
« : Июнь 05, 2019, 15:41 »

Доброго времени суток,
достался по наследству проект на qt , который некоторое время нужно поддерживать.
Более или менее все понятно, но есть пару проблем.
Одна из которых:
QtableView обновляет SqlQueryModel , основываясь на одной логике. (а именно, раз в секунду мы tableView1->SetModel (НоваяМодельСновымиДанными))

надо доработать обновление так, чтобы когда я схватил(установил фокус в ячейку) ячейку таблицы, данные в QtableView (назовём его tableView1) поступали, но чтобы они "добавлялись" , а сама ячейка находилась так же в фокусе и ,если это возможно, только полоса прокрутки сигнализировала о том, что элементов становиться больше, а не как ранее всегда из одного количества (допустим ста строк в таблице).
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #1 : Июнь 06, 2019, 12:25 »

Более или менее все понятно, но есть пару проблем.
Одна из которых:
QtableView обновляет SqlQueryModel , основываясь на одной логике. (а именно, раз в секунду мы tableView1->SetModel (НоваяМодельСновымиДанными))

QAbstractItemView::setModel() слишком кардинальный способ обновления вида. При этом существующая selectionModel() заменяется на новую, соответственно и фокус ячейки тоже изменяется. При изменении модели нужно ещё определить, где находится ячейка, которая была в фокусе до обновления, это может быть не так очевидно. В простейшем случае можно запомнить строку и колонку в текущем виде и с помощью метода QItemSelectionModel::setCurrentIndex() установить фокус для новой модели.

Изучите подробнее Model/View Programming в общем и QItemSelectionModel  в частности.
Записан

Пока сам не сделаешь...
Serjpiter
Гость
« Ответ #2 : Июнь 06, 2019, 22:51 »

А нельзя сделать какой-то аналог заполнения данных в QtableView , по типу как вконтакте?

1)подгрузились посты
2) в случае появления новых постов какое-то время дополнять
3) при достижении какого-то числа сделать плашку "посмотреть данные далее"

только не для постов, а для строк в QtableView.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Июнь 07, 2019, 05:09 »

надо доработать обновление так, чтобы когда я схватил(установил фокус в ячейку) ячейку таблицы, данные в QtableView (назовём его tableView1) поступали, но чтобы они "добавлялись" , а сама ячейка находилась так же в фокусе и ,если это возможно, только полоса прокрутки сигнализировала о том, что элементов становиться больше, а не как ранее всегда из одного количества (допустим ста строк в таблице).
Перед сменой модели делаете setUpdatesEnable(false). После смены вызываете свой сигнал с QueuedConnection. Когда слот этого сигнала получит упр-е - пересчитываете scroll и selection, затем setUpdatesEnable(true)
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #4 : Июнь 07, 2019, 10:10 »

А нельзя сделать какой-то аналог заполнения данных в QtableView , по типу как вконтакте?

Многое зависит от характера обновлений. Если к существующим в модели данным просто добавляются новые строки, то лучше это делать с помощью QAbstractItemModel::insertRows(). Подробности в Resizable models.
Записан

Пока сам не сделаешь...
Serjpiter
Гость
« Ответ #5 : Июнь 14, 2019, 09:48 »

А никто не сможет проконсультировать платно?
писать сюда
vk.com[слэш]qtableview
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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