crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Как узнать какую модель отображает представление в данный момент?
Флинт
  опции профиля:
сообщение 31.10.2011, 9:19
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 1.10.2011
Пользователь №: 2919

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть две модели, основная, наследник от QSqlQueryModel и промежуточная для фильтрации элементов QSortFilterProxyModel. Вопрос: как мне получить указатель на текущую модель, которую отображает представление? Метод model() у представления возвращает указатель типа QAbstractItemModel, а что с ним делать дальше? Что-то я запутался.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ssoft
  опции профиля:
сообщение 31.10.2011, 9:31
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 17.2.2010
Из: Москва
Пользователь №: 1470

Спасибо сказали: 30 раз(а)




Репутация:   3  


Цитата(Флинт @ 31.10.2011, 10:19) *
Метод model() у представления возвращает указатель типа QAbstractItemModel, а что с ним делать дальше? Что-то я запутался.


Можно так

if ( QByteArray( model()->metaObject()->className() ) == QByteArray( "MyModel" ) )
{
    // моя модель
}


или так

if ( model()->metaObject() == &MyModel::staticMetaObject )
{
    // моя модель
}


Главное не забыть определить макрос Q_OBJECT в классе MyModel.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DOGG
  опции профиля:
сообщение 31.10.2011, 9:51
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 9.8.2011
Из: Калининград
Пользователь №: 2798

Спасибо сказали: 6 раз(а)




Репутация:   0  


А дальше использовать метод QAbstractItemModel * QAbstractProxyModel::sourceModel () const, чтобы получить исходную модель

Сообщение отредактировал DOGG - 31.10.2011, 9:53
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Флинт
  опции профиля:
сообщение 31.10.2011, 9:53
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 1.10.2011
Пользователь №: 2919

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо работает. И еще вопросик если можно, возникает проблема при удалении строк из промежуточной модели, у них с главной моделью индексы по понятным причинам не совпадают. Поэтому удаляется, не та строчка, которая нужна. Понятно, что нужно переопределить метод removeRow в прокси модели, потом можно использовать метод sourceModel()->removeRow(int row), только вот все равно надо как-то индекс правильный вычислить.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DOGG
  опции профиля:
сообщение 31.10.2011, 10:00
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 9.8.2011
Из: Калининград
Пользователь №: 2798

Спасибо сказали: 6 раз(а)




Репутация:   0  


у прокси модели есть такой метод для получения правильного индекса из исходной модели - virtual QModelIndex mapToSource ( const QModelIndex & proxyIndex ) const = 0.

Сообщение отредактировал DOGG - 31.10.2011, 10:36
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 1:33