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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableView + QSqlTableModel + обновление модели  (Прочитано 4471 раз)
manarch
Гость
« : Ноябрь 13, 2013, 12:01 »

Народ. Помогите. Устал рыться в интернете и доках. Как сделать так чтобы при обновлении данных модели через select не сбрасывалось выделение строки?
Записан
_OLEGator_
Гость
« Ответ #1 : Ноябрь 13, 2013, 13:15 »

Видимо не там ищешь. Смотри в сторону QItemSelectionModel.
Код
C++ (Qt)
QItemSelectionModel * QAbstractItemView::selectionModel () const
Записан
manarch
Гость
« Ответ #2 : Ноябрь 13, 2013, 13:36 »

Видимо не там ищешь. Смотри в сторону QItemSelectionModel.
Код
C++ (Qt)
QItemSelectionModel * QAbstractItemView::selectionModel () const

Возможно. В таком случае покажите ту самую функцию или предложите мотод который бы позволял реализовать, то что мне нужно.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Ноябрь 13, 2013, 14:09 »

До select() сохраняй, например, индекс выделенной строки,
После выдели ее снова Улыбающийся
Записан

manarch
Гость
« Ответ #4 : Ноябрь 14, 2013, 08:21 »

Проблему решил. Если кому понадобиться:

1. Создал свой класс от QTableView.
2. Переопределил функцию setModel
3. Определил функции rowsAboutToBeRemove и rowsInsert
4. В setModel подключил сигналы модели rowsAboutToBeRemoved  и rowsInserted к слотам rowsAboutToBeRemove и rowsInsert соответственно ДО передачи модели в QTableView::setModel
5. В функции rowsAboutToBeRemove сохранил текущую позицию
6. В функции rowsInsert вернул старую позицию

 
qmytableview.h
Код:
class QMyTableView: public QTableView
{
Q_OBJECT
public:
QMyTableView(QWidget *parent = 0);
~QMyTableView();

void setModel(QAbstractItemModel *model);

public Q_SLOTS:
void rowsAboutToBeRemove(const QModelIndex & parent, int start, int end);
void rowsInsert(const QModelIndex & parent, int start, int end);

private:
QModelIndex m_index;
};
qmytableview.cpp
Код:
QMyTableView::QMyTableView(QWidget *parent)
: QTableView(parent)
{
}

~QMyTableView::QMyTableView()
{
}


void QMyTableView::setModel(QAbstractItemModel *model)
{
if (model == QTableView::model())
return;

if(QTableView::model()){
QAbstractItemModel *model = QTableView::model();
disconnect(model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
this, SLOT(rowsAboutToBeRemove(QModelIndex,int,int)));
disconnect(model, SIGNAL(rowsInserted(QModelIndex,int,int)),
this, SLOT(rowsInsert(QModelIndex,int,int)));
}
connect(model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
this, SLOT(rowsAboutToBeRemove(QModelIndex,int,int)));
connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)),
this, SLOT(rowsInsert(QModelIndex,int,int)));
QTableView::setModel(model);
}


void QMyTableView::rowsAboutToBeRemove(const QModelIndex & parent, int start, int end)
{
m_index = currentIndex();
}

void QMyTableView::rowsInsert(const QModelIndex & parent, int start, int end)
{
setCurrentIndex(model()->index(m_index.row(), m_index.column()));
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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