Welcome, Guest. Please login or register.
Did you miss your activation email?

Author Topic: Косяк или всё нормально???  (Read 4778 times)

Fynjy

  • Newbie
  • *
  • Posts: 23
    • View Profile
Косяк или всё нормально???
« on: December 18, 2017, 09:21:41 am »
Заметил такую штуку:
в отчете DataBand, DataFooter.
В DataBand -- текст, в DataFooter -- text.
перехожу в режим просмотра и текст только отображается в DataBand.
Если в DataBand вставлю переменную которая в qt у меня идет как список, то только тогда данные появляются в DataFooter.
Если удалю переменную из DataBand и оставлю только текст, то продолжает печататься текст столько раз сколько элементов у меня было в переменной.
Что это? При переоткрытии файла xlmr, та же фигня...

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1005
    • View Profile
Re: Косяк или всё нормально???
« Reply #1 on: December 18, 2017, 11:59:45 am »
Это нормально :)

DataFooter завершает группу данных, нет группы нет футера.
После того как вы положили, видимо через drag&drop, поле из источника данных, вы тем самым выставили у DataBand в свойстве datasource этот самый источник данных. После того как вы удалили поле, DataBand все равно остался проинициализированным этим источником и соответственно продолжает дублировать текст по количеству записей в источнике данных.

Fynjy

  • Newbie
  • *
  • Posts: 23
    • View Profile
Re: Косяк или всё нормально???
« Reply #2 on: December 18, 2017, 12:09:27 pm »
Это нормально :)

DataFooter завершает группу данных, нет группы нет футера.
После того как вы положили, видимо через drag&drop, поле из источника данных, вы тем самым выставили у DataBand в свойстве datasource этот самый источник данных. После того как вы удалили поле, DataBand все равно остался проинициализированным этим источником и соответственно продолжает дублировать текст по количеству записей в источнике данных.
Да Вы правы, тоже нашел причину...
Тогда вопрос такой:
Делаю таблицу коолонки которой представляют QStringList, количество записей в них одинаково. Тогда какой "колоночный" набор выбирать в DataSource??

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1005
    • View Profile
Re: Косяк или всё нормально???
« Reply #3 on: December 18, 2017, 02:57:14 pm »
Quote
Делаю таблицу коолонки которой представляют QStringList, количество записей в них одинаково. Тогда какой "колоночный" набор выбирать в DataSource??
Не совсем понял вопрос :) 

Fynjy

  • Newbie
  • *
  • Posts: 23
    • View Profile
Re: Косяк или всё нормально???
« Reply #4 on: December 18, 2017, 03:45:40 pm »
Quote
Делаю таблицу коолонки которой представляют QStringList, количество записей в них одинаково. Тогда какой "колоночный" набор выбирать в DataSource??
Не совсем понял вопрос :)
в бенд данных надо поместить таблицу состоящую из 3 коллонок.
У меня источником данных явлется не БД а 3 StringList'а. Кинул все три в databand. В результате один стал источником в свойстве DataSource и нормально вывел свои элементы, а остальные вывели только первый свой элемент но повторили его ровно стольлко раз сколько элементов было в первом.

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1005
    • View Profile
Re: Косяк или всё нормально???
« Reply #5 on: December 18, 2017, 09:40:41 pm »
Для limereport вы предоставили 3 источника данных.
Перемещение происходит только по датасету указанному в DataBand.
Используйте интерфейс CallbackDatasource для объединения в своем коде этих трех источников в один.

Fynjy

  • Newbie
  • *
  • Posts: 23
    • View Profile
Re: Косяк или всё нормально???
« Reply #6 on: December 20, 2017, 07:48:57 am »
Для limereport вы предоставили 3 источника данных.
Перемещение происходит только по датасету указанному в DataBand.
Используйте интерфейс CallbackDatasource для объединения в своем коде этих трех источников в один.
Имеете ввиду механизм "сигнал-слотных" соединений?
Да, сделал через модель данных QAbstractTableModel. Вывожу все три из поля. Заметил такую штуку - если в коде модели в
обработчиках:
Code: [Select]
rowCount(const QModelIndex &parent);
columnCount(const QModelIndex &parent);
оставляю такой код:
Code: [Select]
if (!parent.isValid())
return 0;
то в дизайнере отчетов не могу открыть таблицу с данными в окошке DataBrowser(исчезает треугольничек слева), не раскрывается как на картинке... Не понял в чем прикол. Если поясните, буду признателен...


Subst

  • Sr. Member
  • ****
  • Posts: 450
    • View Profile
Re: Косяк или всё нормально???
« Reply #7 on: December 20, 2017, 08:52:04 am »
if (!parent.isValid())
return 0;

НУ видимо параметр Parent как раз невалидный, по умолчанию он QModelIndex(). Соответсвенно количество строк и столбцов равно нулю

Fynjy

  • Newbie
  • *
  • Posts: 23
    • View Profile
Re: Косяк или всё нормально???
« Reply #8 on: December 20, 2017, 11:48:39 am »
if (!parent.isValid())
return 0;

НУ видимо параметр Parent как раз невалидный, по умолчанию он QModelIndex(). Соответсвенно количество строк и столбцов равно нулю
извиняюсь за тупой вопрос, а как его валидным сделать? Только начал осваивать MVC, уж не судите строго)

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1005
    • View Profile
Re: Косяк или всё нормально???
« Reply #9 on: December 20, 2017, 12:31:04 pm »
Parent валидный в случае если у вас дерево, а не таблица

Subst

  • Sr. Member
  • ****
  • Posts: 450
    • View Profile
Re: Косяк или всё нормально???
« Reply #10 on: December 20, 2017, 05:13:44 pm »
To Fynjy:

По идее если ты унаследовал от QAbstractTableModel, тебе надо определить привантно что-то вроде QVector <QVariant> > m_data; или подобную загогулину, которая может представить собой двумерный массив неопределенной длины ( и ширины, если угодно) и сним работать.

Поскольку ты наследуешь от абстратного класса, тебе и самому необходимо реализовать методы класса. Если хочешь проверку на валидность Parent'а делать, то тебе и создавать индексы, переопределять index() метод. Иначе, как сказал Alex у тебя Parent не будет верным.

Можно через internalPointer... но мне не ясна суть необходимости вставки этого условия в код (if (!parent.isValid()) )