crossplatform.ru

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

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


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

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

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




Репутация:   17  


Спасибо большущее. Помогло.

Ну для остальных приведу немного кода. Основное отличие то, что в моей модели, в отличие от модели QStringListModel, нет своего хранилища данных, а идет обновление из внешнего хранилища.

Вот код:
class ChartsListModel: public QAbstractTableModel
{
    Q_OBJECT

/* указатель на внешнее хранилище, список заголовков*/

public:
    ChartsListModel(QObject *parent, EntityList* p_list);
    virtual ~ChartsListModel();
    virtual Qt::ItemFlags flags(const QModelIndex &index) const
    { return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable; }
    virtual int rowCount(const QModelIndex& parent = QModelIndex()) const { return 100 /*Заглушка - на самом деле, количество строк в таблице*/; }
    virtual int columnCount(const QModelIndex& parent = QModelIndex()) const { return 3 /*Еще одна заглушка - написано реальное количество колонок*/; }
    virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
    virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
    virtual bool insertRows(int row, int count, const QModelIndex& parent = QModelIndex());
    void update() { reset(); }
};



/// Вставка строк в таблицу при обновлении
bool ChartsListModel::insertRows(int row, int count, const QModelIndex& parent)
{
    Q_UNUSED(parent);
    if(count < 1 || row < 0 || row > rowCount(parent))
        return false;

    beginInsertRows(QModelIndex(), row, row + count - 1);
    endInsertRows();

    return true;
}



В коде добавления данных вызываю update(), а в сущности, reset()
/// Слот добавления выделенных карт
void T::addToList()
{
           /* код заполнения списка с картами */
          model -> update();
}

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


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

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

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




Репутация:   94  


Цитата(AD @ 12.2.2010, 19:28) *
{ return 100 /*Заглушка - на самом деле, количество строк в таблице*/; }
собственная мысль: В некоторых случаях мне приходится, ради быстроты прототипирования, использовать "магические числа". Но я поступаю не так. Я завожу переменную с осмысленным именем, например, m_rowCount, и в конструкторе её инициализирую. А в коде она уже может применяться в нескольких местах. Тогда, если я начну совершенствовать код, мне не нужно будет вспоминать почему "100", да и остальной код исправлять не придётся.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 12.2.2010, 17:04
Сообщение #23


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

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

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




Репутация:   17  


Я не очень понял твою мысль, Юра. Я вставил эти числа при внесении кода на форум, чтобы не "вынести" из проекта лишнее. У меня в коде реальное количество строк и столбцов в таблице.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.2.2010, 17:17
Сообщение #24


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

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

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




Репутация:   94  


Цитата(AD @ 12.2.2010, 20:04) *
Я вставил эти числа при внесении кода на форум, чтобы не "вынести" из проекта лишнее. У меня в коде реальное количество строк и столбцов в таблице.
ну и я тебя тоже не понял, мы квиты ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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