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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Создание модели  (Прочитано 9800 раз)
NKovalev64
Гость
« : Январь 26, 2013, 14:52 »

Здравствуйте уважаемые форумчане!

Коротко о проблеме: есть массив данных (в среднем около 100 элементов), каждый элемент которого представляет собой блок вида "ключ-значение" (около 10 полей), при этом все элементы массива содержат ОДИНАКОВОЕ количество ключей, ключи также идентичны.
Вот пример такого массива a0{key1:val1, key2:val2, ... keyn:valn}, a1{key1:val10, key2:val20, ... keyn:valn}, ... .

Значение ключей может быть двух типов double и string, это важно.

Данный массив я хочу отобразить в виде таблицы, в таком виде:
Код:
	key0	key1	key2	key3	key4	...	keyN
a0 val0 val1 val2 val3 val4 ... valn
a1 val10 val11 val21 val31 val41 ... valn1
...
an
Требуется создать МОДЕЛЬ которая будет создаваться из массива и помещаться в QTableView(?).
Важно! double значения некоторых ключей весьма длинные числа, необходимо чтобы в таблице они отображались с максимальной точностью, например 1952424 а не 1.95242e+06. При этом необходимо чтобы в конечной таблице (виджете) столбцы соответствующие double ключам сортировались верно, т.е. как числа а не как строки.
Далее (менее важно по приоритету) было бы здорово если модель умела нести в себе в качестве значений одного из ключей картинку, т.е. ссылку на нее например в файл ресурсов так чтобы картинка (иконка) отображалась к отдельном столбце таблицы:
Код:
	key0	key1	key2	key3	key4		...	keyN
a0 val0 val1 val2 val3 картинка ... valn
a1 val10 val11 val21 val31 картинка. ... valn1
...
an

Буду рад если кто то подскажет как написать такую модель или предложит готовое решение. Спасибо.
Записан
NKovalev64
Гость
« Ответ #1 : Январь 30, 2013, 13:43 »

Никто не знает или жалко подсказать?
А за деньги? Сколько?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Январь 30, 2013, 13:56 »

Что делаешь и что не получается?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
« Ответ #3 : Январь 30, 2013, 14:20 »

Немного бредово, но в принципе реально сделать довольно быстро - недельку ток поизучать )
Записан
NKovalev64
Гость
« Ответ #4 : Январь 30, 2013, 14:37 »

Что делаешь и что не получается?

Я даже не знаю что сказать. ВСЕ что известно указал выше.
Сейчас реализую задачу без использования модели, aka в лоб. Тут есть свои камни, например:
Создаю ячейку таблицы конструктором QTableWidgetItem::QTableWidgetItem(int type = Type). Передаю тип (2 - double, 3 - string - насколько я понимаю). Со строками все понятно, а числа отображаются только в экспоненциальном виде, например число 1952424 отображается как 195242e+06. Как сделать чтобы отображалось всегда нормально???
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Январь 30, 2013, 14:52 »

Наследуйся от http://doc.qt.digia.com/qt/qabstractitemmodel.html и переопределяй нужные методы. Примеры там есть.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
NKovalev64
Гость
« Ответ #6 : Январь 30, 2013, 14:59 »

Наследуйся от http://doc.qt.digia.com/qt/qabstractitemmodel.html и переопределяй нужные методы. Примеры там есть.
Что ж, наверное я должен сказать спасибо - Спасибо! Я читал это уже не единожды, и в qtdoc, и у Бланшет и Боровского и еще несколько десятков статей в интернете. Что из это-го можно понять!??? Откуда я узнаю какие именно методы я должен буду переопределить и как? Да и вообще, это просто невозможно понять с листа.
В последнем посте я сформулировал простой вопрос, КАК ОТОБРАЗИТЬ ОБЫКНОВЕННОЕ ЦЕЛОЕ ЧИСЛО В ОБЫЧНОМ ВИДЕ!?
Записан
Bepec
Гость
« Ответ #7 : Январь 30, 2013, 15:03 »

Отдать в метод data QVariant с числом Веселый
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #8 : Январь 30, 2013, 15:22 »

... Я читал это уже не единожды, и в qtdoc, и у Бланшет и Боровского и еще несколько десятков статей в интернете. Что из это-го можно понять!???
про модели очень толково написано здесь - http://www.ozon.ru/context/detail/id/6364884/
Записан
NKovalev64
Гость
« Ответ #9 : Январь 30, 2013, 16:26 »

Отдать в метод data QVariant с числом Веселый
Что значит отдать в метод data()? Метод QVariant QTableWidgetItem::data(int role) const [virtual] возвращает значение но не устанавливает его.
Записан
Bepec
Гость
« Ответ #10 : Январь 30, 2013, 16:30 »

Проще согласиться, чем объяснить.
Записан
NKovalev64
Гость
« Ответ #11 : Январь 30, 2013, 16:45 »

Проще согласиться, чем объяснить.

А если попробовать?
Item->data(Qt::DisplayRole) = 4; - не отображает ничего

Пока воспользовался этим: http://www.prog.org.ru/index.php?topic=24004.msg170463#msg170463, помогло.
« Последнее редактирование: Январь 30, 2013, 17:13 от NKovalev64 » Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #12 : Январь 30, 2013, 18:01 »

А если попробовать?
Item->data(Qt::DisplayRole) = 4; - не отображает ничего

Это все неправильно. Если надо отображать таблицу без особых изысков, то лучше наследоваться от QAbstractTableModel и
Цитировать
When subclassing QAbstractTableModel, you must implement rowCount(), columnCount(), and data(). Default implementations of the index() and parent() functions are provided by QAbstractTableModel. Well behaved models will also implement headerData().
Как "implement rowCount(), columnCount(), and data()" смотрите в примерах и внимательнее изучите "Model/View Programming", это в справке Qt есть.

Если коротко, то числа можно вывести как-то так:
Код:
QVariant SomeTableModel::data(const QModelIndex &index, int role) const
{
  if (!index.isValid())
    return QVariant();

  switch (role)
  {
    case Qt::DisplayRole:
      switch (index.column())
      {
        case 0:
          return 4;
          break;
        case 1:
          return 423423.2342342;
          break;
        default:
        break;
      }
    break;
    default:
    break;
  }

  return QVariant();
}
Записан

Пока сам не сделаешь...
Bepec
Гость
« Ответ #13 : Январь 30, 2013, 18:05 »

А если ещё проще, то вы спрашиваете про создание модели.

А сами, на деле используете уже готовую. Соответственно наши советы не могут вам помочь, ибо вы задали вопрос, не понимая его значения Улыбающийся
Записан
NKovalev64
Гость
« Ответ #14 : Февраль 02, 2013, 13:11 »

Всем спасибо за ответы. Мне таки удалось создать собственную модель от QAbstractTableModel, переопределить нужные методы и получить профит. Вообщем-то теперь кажется не сложно))) Но остаются еще вопросы, например как в в одном из столбцов отобразить иконки? Когда делал через qtablewidget, просто добавлял итем и устанавливал иконку. теперь использую модель установленную в qtableview и в одном из столбцов отображается адрес картинки, как сделать чтобы отображалась сама картика? (функция возвращающая иконку от адреса есть)
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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