crossplatform.ru

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

3 страниц V  < 1 2 3 >  
Ответить в данную темуНачать новую тему
> Возможность редактирования модели и корректное обновление
AD
  опции профиля:
сообщение 11.2.2010, 21:59
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Ну я так и попробовал. Возвращается пустая табличка!

[attachment=946:edit.JPG]
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 11.2.2010, 22:08
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


QVariant ChartsListModel::data(const QModelIndex& index, int role) const
{
    if(!index.isValid() || role != Qt::DisplayRole || role != Qt::EditRole || _p_entity_list -> isEmpty())
        return QVariant();


А лучше вообще убрать здесь проверки роли.


Сообщение отредактировал BRE - 11.2.2010, 22:13
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 12.2.2010, 11:45
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(BRE @ 11.2.2010, 22:08) *
А лучше вообще убрать здесь проверки роли.

Нет в этот раз, ты ошибся. Условие правильно написал и все заработало:
/// Возвращает данные о карте в зависимости от индекса и роли
QVariant ChartsListModel::data(const QModelIndex& index, int role) const
{
    if(!index.isValid() || (role != Qt::DisplayRole && role != Qt::EditRole) || _p_entity_list -> isEmpty())
        return QVariant();

    QVariant result;
    MapEntity& chart((*_p_entity_list)[index.row()]);
    switch(index.column())
    {
    case 0:
        result.setValue(QFileInfo(chart.name()).fileName());
    break;
    case 1:
        result.setValue(QString::number(chart.header().C0, 'f', 0));
    break;
    }

    return result;
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 12.2.2010, 11:50
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Цитата(AD @ 12.2.2010, 11:45) *
Нет в этот раз, ты ошибся. Условие правильно написал и все заработало:

Я про то говорил, что в первом условии лучше оставит только такие проверки без которых дальнейшее выполнение метода невозможно:
if( !index.isValid() || _p_entity_list -> isEmpty())

А обработку ролей вынести в отдельное условие. Если ты сейчас захочешь цветами что-то выделить или иконки добавить, ты как будешь это условие менять?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 12.2.2010, 13:22
Сообщение #15


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


На счет обновления данных в таблицах пока вопрос открытый. Функцию setModel() вызвал в конструкторе. Как сделать так, чтобы при добавлении новых карт, список обновлялся?

Вот так:
/// constructor
{
           tableSelectedCharts -> setModel(_modelTableCharts.get());
}

// Slot of adding charts
void T::addToList()
{
        for(/*цикл просмотра всех карт*/)
    {
        MapEntity& chart(/*выбор из списка*/);
        if(chart == MapEntity()) continue;

        if(/*условие добавления*/)
                        /* Добавление в список выбранных карт карт*/
            _selected_charts.append(chart);
    }
}


Сообщение отредактировал AD - 12.2.2010, 13:22
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.2.2010, 13:27
Сообщение #16


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(AD @ 12.2.2010, 16:22) *
Как сделать так, чтобы при добавлении новых карт, список обновлялся?
чем является карта в терминах модели? Строкой, столбцом, ячейкой?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 12.2.2010, 13:38
Сообщение #17


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Карта в терминах модели является строкой.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.2.2010, 13:57
Сообщение #18


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Тогда почитай внимательно Изменение размеров моделей
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 12.2.2010, 15:46
Сообщение #19


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Юра, спасибо. Один маааленький вопросик остался. Мне напрямую придется эту insertRows() вызывать, что-ли? Ну то есть.... функция виртуальная, но я не понял когда она все-таки вызывается.... В отладчике я в нее и не попал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 12.2.2010, 16:03
Сообщение #20


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


AD, посмотри на реализацию класса QStringListModel. Моделька маленькая, все очень просто сделано, все понятно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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




RSS Текстовая версия Сейчас: 22.1.2025, 14:08