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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Не отображаются итемы в кастомной моделе.  (Прочитано 10573 раз)
magog
Гость
« : Февраль 16, 2012, 14:29 »

итем: http://paste.pocoo.org/show/551849/
модель: http://paste.pocoo.org/show/551850/
минимал репродьюс: http://dl.dropbox.com/u/25249431/test.zip

Хидер отображается. Итем добавляется и по дебагам это отслеживается. Но в модели не показывается.
Записан
Bepec
Гость
« Ответ #1 : Февраль 16, 2012, 14:32 »

Кхм. Сразу 2 куска кода. Интересно, кто нибудь их посмотрит?
Записан
magog
Гость
« Ответ #2 : Февраль 16, 2012, 14:33 »

Я тут первый раз спрашиваю - пока не в курсе как тут и на что реагируют
Записан
Bepec
Гость
« Ответ #3 : Февраль 16, 2012, 14:41 »

Уважаемый магог, не объясните мне сакральный смысл кода?

Код:
	TreeModel::TreeModel (const QStringList& headers, QObject *parent)
: QAbstractItemModel (parent)
, RootItem_ (0)
{
QVector<QVariant> rootData;
std::for_each (headers.begin (), headers.end (),
[&rootData] (decltype (headers.front ()) header)
{
rootData << header;
});

RootItem_ = new TreeItem (rootData);
}
 

Непонимающий я просто озадачен, если не сказать более.

Ведь можно и так:
Код:
TreeModel::TreeModel (const QStringList& headers, QObject *parent)
: QAbstractItemModel (parent)
, RootItem_ (0)
{
QVector<QVariant> rootData;
rootData << headers;

RootItem_ = new TreeItem (rootData);
}

update: вот про это
Код:
std::for_each (headers.begin (), headers.end (),
[&rootData] (decltype (headers.front ()) header)
подробнее, если можно. Ниразу такого не встречал, к тому же у меня оно не компилится и недоумевает по поводу "[&rootData] (decltype (headers.front ()) header)"
« Последнее редактирование: Февраль 16, 2012, 14:43 от Bepec » Записан
sudo
Гость
« Ответ #4 : Февраль 16, 2012, 14:42 »

Кто будет компилить, собирается только под 4.8
Записан
Bepec
Гость
« Ответ #5 : Февраль 16, 2012, 14:43 »

Печально как то...
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #6 : Февраль 16, 2012, 14:43 »

Bepec, это с++11.
Записан

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

Я не нашел в доках оператора для добавления в вектор вариантов стринглиста.
Записан
magog
Гость
« Ответ #8 : Февраль 16, 2012, 14:46 »

И как я и предполагал - оно не работает тогда. Хоть и компилируется
Записан
sudo
Гость
« Ответ #9 : Февраль 16, 2012, 14:49 »

Если честно, разбираться не очень хочется. Потому что много букв и мягко говоря непривычный стиль кода. Но! Метод data() не вызывается от слова совсем (исключение - уменьшить окно до появления прокрутки и ей подвигать)
Записан
Bepec
Гость
« Ответ #10 : Февраль 16, 2012, 14:50 »

Работает оно.
Но раз тут С++11  + Qt8 пошёл, то это жесть какая то ^.^

PS работает и компилится для Qt 4.7.2 Подмигивающий
Записан
sudo
Гость
« Ответ #11 : Февраль 16, 2012, 14:52 »

У меня системный 4.7.4 отказался собирать.

В общем, метод rowCount всегда возвращает 0, поэтому нужно смотреть итемы
нагнал, надо было кнопочку понажимать Улыбающийся
Записан
magog
Гость
« Ответ #12 : Февраль 16, 2012, 14:54 »

Там лямбда используется в качестве функтора.
Записан
Bepec
Гость
« Ответ #13 : Февраль 16, 2012, 14:56 »

Думаю человек просто не разобрался с Model-View и рубит с плеча.

Правда используется незнакомый мне С++11 и стиль программирования ммм...

Стиль программирования такого типа недавно обсуждался на хабре, но мной был забракован за нечитабельностью и сложностью для понимания Подмигивающий
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #14 : Февраль 16, 2012, 14:56 »

Это не стиль программирования - это новый стандарт языка с++.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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