Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Serjpiter от Июнь 05, 2019, 15:41



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

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


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

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

Изучите подробнее Model/View Programming (https://doc.qt.io/qt-5/model-view-programming.html) в общем и QItemSelectionModel (https://doc.qt.io/qt-5/qitemselectionmodel.html)  в частности.


Название: Re: Не перерисовывать qtableview
Отправлено: Serjpiter от Июнь 06, 2019, 22:51
А нельзя сделать какой-то аналог заполнения данных в QtableView , по типу как вконтакте?

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

только не для постов, а для строк в QtableView.


Название: Re: Не перерисовывать qtableview
Отправлено: Igors от Июнь 07, 2019, 05:09
надо доработать обновление так, чтобы когда я схватил(установил фокус в ячейку) ячейку таблицы, данные в QtableView (назовём его tableView1) поступали, но чтобы они "добавлялись" , а сама ячейка находилась так же в фокусе и ,если это возможно, только полоса прокрутки сигнализировала о том, что элементов становиться больше, а не как ранее всегда из одного количества (допустим ста строк в таблице).
Перед сменой модели делаете setUpdatesEnable(false). После смены вызываете свой сигнал с QueuedConnection. Когда слот этого сигнала получит упр-е - пересчитываете scroll и selection, затем setUpdatesEnable(true)


Название: Re: Не перерисовывать qtableview
Отправлено: ViTech от Июнь 07, 2019, 10:10
А нельзя сделать какой-то аналог заполнения данных в QtableView , по типу как вконтакте?

Многое зависит от характера обновлений. Если к существующим в модели данным просто добавляются новые строки, то лучше это делать с помощью QAbstractItemModel::insertRows(). Подробности в Resizable models (https://doc.qt.io/qt-5/model-view-programming.html#resizable-models).


Название: Re: Не перерисовывать qtableview
Отправлено: Serjpiter от Июнь 14, 2019, 09:48
А никто не сможет проконсультировать платно?
писать сюда
vk.com[слэш]qtableview