LimeReport Forum
General Category | Основное => Discussion | Обсуждение => Topic started by: GraninDm on January 19, 2016, 02:16:06 pm
-
Добрый день!
Пробую версию 1.3.1.
Заметил ошибочки в дизайнере.
1. Если в дизайнере очистить параметр alignment (horizontal/vertical) и потом перевести фокус на сам отчет, то дизайнер падает.
ASSERT failure in QVector<T>::operator[]: "index out of range", file C:\Qt\Qt5.4.2\5.4\mingw491_32\include/QtCore/qvector.h, line 398
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
Компилировалось в Qt 5.4.
2. Borders у меня почему-то устанавливаются только по одному краю в дизайнере, в предпросмотре их не видно и соответственно на печать не выводятся.
И еще вопросы
1. Как можно подставить в отчет текущее время.
Я так понял now() возвращает только дату?
2. Как наиболее правильно вставить в отчет печать штрихкодов?
Пока с этим не разбирался. Просто вопрос на будущее...
P.S.
Ваш проект очень понравился.
До этого пробовал QuteReport. С ним что-то не заладилось у меня :)
-
Еще добавлю...
Сейчас случайно удалил страницу
Нажимаю кнопку новый отчет.
После отмены сохранения текущего отчета дизайнер падает
QGraphicsScene::removeItem: item 0x210ceb30's scene (0x6c65726f) is different from this scene (0x1b0538f8)
Про border уточню...
Кнопками быстрого доступа все работает. Не работает в инспекторе объектов.
И еще по поводу нового функционала.
Хотелось бы загрузку и сохранение шаблонов из/в строку.
Удобно если нужно загружать шаблоны из БД, например.
-
Что-то у меня все падает и падает.
Только что открыл пустой отчет.
Добавил раздел "Данные"
Нажал кнопку "Горизонтальная группировка"
Дизайнер упал.
ASSERT: "d" in file ..\..\include/QtCore/../../src/corelib/tools/qscopedpointer.h, line 112
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
-
Еще...
Если удалить страницу.
И после этого начать нажимать кнопки на тулбаре "Элементы отчета", то дизайнер рушится.
Видимо нет проверки на доступность текущей страницы.
Пока дизайнер сыроват...
-
Если из инспектора данных перетащить пользовательскую переменную на страницу, то переменная вставляется вместе с текущим значением.
Не знаю ошибка это или нет. Не понятно...
-
Спасибо за информацию о выявленных багах, будем разбираться. Побольше бы таких замечаний, мало кто отписывается столь детально. Исправим в ближайшее время. Активным тестировщикам- в будущем преференции!:-)
-
GraninDm,
Хотелось бы загрузку и сохранение шаблонов из/в строку.
Удобно если нужно загружать шаблоны из БД, например.
Есть функция bool loadFromByteArray(QByteArray *data);
для бд можно её использовать
Надо только saveToByteArray приделать :-D
-
GraninDm, Поправил найденые Вами баги. Добавил saveToString, loadFromString, saveToByteArray к LimeReport::ReportEngine. В скрипте функция now() теперь возвращает DateTime. А так же добавлены функции dateTimeFormat, timeFormat. Если все ок выложим на sourceforge.
[вложение удалено администратором]
-
Еще по мелочи...
В качестве придирок :))
1. В инспекторе данных у иконок источников данных всплывающие подсказки не показываются.
2. В тулбаре main tools (судя по всему не добавлен перевод на русский) кнопки желательно переставить
Создать - Открыть - Сохранить
А сейчас там Создать - Сохранить - Открыть. Я из-за этого кнопку Открыть не сразу увидел.
Сначала в меню полез - там один порядок, а в толбаре другой. Как в анекдоте - "Не аккуратненько..."
3. Желательно иметь возможность запустить дизайнер в определенном каталоге, а то при открытии выбора файла отчета я так понял открывается текущий каталог
Что-то типа
report->setCurrentReportDir(QString);
4. Не знаю планируется это или нет. Желательно иметь возможность встраивать дизайнер как виджет в окно программы.
Потому как не всем нужен предпросмотр в отдельном окне.
5. При первом открытии окно дизайнера уезжает вправо вниз.
6. При наведении на контуры объекта было бы правильно чтобы вид курсора менялся на SizeVertical SizeHorizontal SizeSlash и SizeBackSlash
7. У Shape rectangle добавить бы скругленные углы.
8. Как перехватывать события Загрузить отчет Сохранить отчет, опять же для сохранения в бд. Куда коннектить?
connect(report, SIGNAL(onReportLoad())...)
connect(report, SIGNAL(onReportSave())...)
-
Перекомпилировал с исправлениями.
Еще заметил
1. У кнопки добавления Разделов отчета нет всплывающей подсказки.
2. Падение
а) добавляем раздела "Данные"
б) нажимаем кнопку "Горизонтальная группировка"
в) дизайнер падает
-
Еще не понял...
Например
Добавил поле в Report header.
Решил перетащить его в Page header.
Мышью перетащить не получается. Только вырезать вставить.
Немного не очевидно.
Было бы здорово
1. Чтобы по двойном щелчке по нижней границе раздела высота раздела устанавливалась по самому нижнему элементу раздела.
2. У отчета была сетка (например 4х4) и все элементы выравнивались по ней. Без этого просто мука.
3. А при перетаскивании, например, с Ctrl сетка ингнорировалась бы.
Сейчас добавил в Report header большой рисунок (на полстраницы)
Но размер самого раздела оставил небольшим, подумал, что рисунок напечатается с перекрытием на других разделах (типа watermark).
Однако заголовок растянулся до полного размера рисунка.
//Добавка
Не сразу увидел autoHeigth в настройках раздела. Частично понятно как работает, но watermark все равно не получилось сделать
Всё получилось. Вопрос снят :))
//--
Не очевидно, по крайней мере для меня.
Пока все.
Вечером еще отпишусь, если что найду.
Все таки еще добавок.
Я раньше на Visual FoxPro писал.
Там можно было выделить элемент и двигать его стрелками клавиатуры, а с Shift изменять размер. Тоже было бы удобно.
-
GraninDm, Пожелания приняли к сведению :) Элемент можно выделить и двигать стрелками: с Ctrl меняется положение, с Shift размер.
-
Буду писать пока не забыл :)
Накидал отчет.
Подключил модель
1. В настройках раздела "Данные" стоит autoHeight, но раздел по высоте не поджимается по элементам, если он больше, если меньше - все нормально.
2. Не понял как сделать чтобы "Заголовок данных" повторялся на каждой странице
3. Мне кажется было бы удобнее, если элементы отчета не уезжали за пределы раздела, или хотя бы настройку сделать "разрешить/запретить перетаскивание за пределы раздела"
А то их можно утащить за пределы раздела и их не видно.
4. Если элемент привязать к странице а потом поменять на привязку к разделу, то он иногда уходит за пределы раздела и его не видно после этого.
5. Было бы удобно, чтобы при перетаскивании элементов они бы "подмагничивались" к краям других элементов, чтобы не перетаскивать мышью по одному пикселю (Можно руку сломать и правый глаз)
6. При выделении элементов сделать выделение более явным. Хотя бы линией двойной толщины или внешней рамкой какой-нибудь.
При выделении нескольких элементов, мне по крайней мере, не всегда понятно что выделено - что нет. Если выделить элемент с рамкой - то вообще не понятно выделен он или нет.
7. Когда я выделяю несколько элементов и меняю высоту в инспекторе, то меняется высота только у одного элемента.
8. Если менять высоту элемента в инспекторе, то при переходе на следующий элемент группы (Например "Геометрия") сворачивается. Очень неудобно.
-
GraninDm,
Буду писать пока не забыл :)
Это правильно :) Чем больше свежих идей тем лучше :)
А то у нас уже глаз замылен, рука набита :)
-
Вертикальное выравнивание как то странно работает.
В приложении поле с вертикальным выравниванием по центру.
Margin я так понял только слева отступает.
Желательно сделать со всех 4 сторон, потому как при выравнивании справа, например, текст подтягивается непосредственно к краю границы элемента.
Это конечно можно шейпами нарисовать - но неудобно огород такой городить ради отступа.
Вот только без повтора заголовка данных на каждую страницу - это для меня катастрофа.
[вложение удалено администратором]
-
Еще...
У "заголовка данных" и "завершения данных" нет настройки количества колонок.
Придется для каждой колонки заголовок дублировать :((
-
GraninDm, Посмотрю сегодня выравнивание и постараюсь на днях повтор заголовка на новых страницах приделать.
-
Еще...
Если выделить несколько элементов с разным выравниванием и установить, например, вертикальное выравнивание, то у всех поменяется и горизонтальное выравнивание.
А оно по идее должно остаться прежним.
-
Еще...
В источнике данных поле с заголовком "Дата поступления" с пробелом
Перетащил в "Детали"
Поле отображается как обычная строка $D{details.Дата поступления}
Значение не подставляется
-
Поля с пробелами нам еще не попадались :) Посмотрим что с этим можно сделать.
-
Это не поле с пробелом.
Поле как раз по аглицки.
Это хедер модели
-
И еще по поводу названия полей.
Мне что-то кажется, что нельзя привязываться к хедерам модели
Нужно привязываться к названиям полей модели model.record().fieldName()
Потому-что после QTranslator названия могут меняться
-
По поводу многоколоночных отчетов хочу предложить следующее.
При горизонтальном заполнении заполнение идет так
1 2
3 4
и т.д
Тут все понятно.
А вот при вертикальном заполнении могут быть два варианта
1.
1 8
2
3
4
5
6
7
Первая колонка до конца листа, потом вторая колонка
2.
1 5
2 6
3 7
4
Колонки делятся поровну, но заполняется сначала первая потом вторая.
Вот желательно бы второй вариант реализовать.
-
Новый фикс
1. Пошаманил с выравниванием текста
2. Добавил сигналы onLoad(bool& loaded), onSave()
3. Поправил падение при нажатии на горизонтальную группировку.
4. Исправил ситуацию с полем в котором есть пробел
5. Добавил метод setCurrentReportsDir(const QString& dirName)
6. Поковырял установку выравнивания текста
7. Поковырял перевод
К вопросу о хедерах модели и названиях полей. Для передачи данных в LimeReport используется QAbstarctItemModel а у неё рекорда нет.
[вложение удалено администратором]
-
Новый фикс
1. Пошаманил с выравниванием текста
Работает. Но...
В приложении рисунок там есть два заголовка. Они по всем настройкам одинаковые
В приложении еще отчет. Думаю будет полезно
2. Добавил сигналы onLoad(bool& loaded), onSave()
Пока не смотрел
3. Поправил падение при нажатии на горизонтальную группировку.
Проверил. Все нормально
4. Исправил ситуацию с полем в котором есть пробел
Проверил. Все нормально
5. Добавил метод setCurrentReportsDir(const QString& dirName)
Пока не смотрел
6. Поковырял установку выравнивания текста
Проверил. Все нормально
7. Поковырял перевод
Проверил. Все нормально
К вопросу о хедерах модели и названиях полей. Для передачи данных в LimeReport используется QAbstarctItemModel а у неё рекорда нет.
Понял.
Подытожу.
То, что сейчас в первую очередь нужно.
1. Повтор заголовка данных и окончания данных на страницах.
2. Колонки в заголовке данных и окончании данных
3. AutoHeight, чтобы поджималось к краю последнего элемента
4. Выделенный элемент выделять жирнее. Когда выделен элемент с границей, то вообще не понятно выделе он или нет.
Во вторую очередь
1. Вертикальное заполнение колонок, как я писал
2. Сделать LeftMargin, RightMargin, TopMargin, BottomMargin
В третью
1. Чтобы курсорчики менялись при растягивании элементов
2. Сетку и привязку к сетке
3. Примагничивание к краям элементов
4. Чтобы по двойном щелчке по нижней границе раздела высота раздела устанавливалась по самому нижнему элементу раздела.
5. Попробуйте перетащить поле данных в DataBand удерживая кнопку Ctrl. Очень интересно получается. Уезжает раздел и элемент одновременно
6. Добавить при перетаскивании элемента с Ctrl, чтобы происходило копирование элемента.
7. Прямоугольник со скругленными краями
8. Чтобы группы в инспекторе объектов не закрывались при выделении элементов.
[вложение удалено администратором]
-
И по поводу штрихкодов, ответьте, пожалуйста.
Можно их сейчас как то вставлять в отчет. Если нет, то будет ли в планах?
-
Ошибка в названии метода
setCurrentReporstDir
Нужно
setCurrentReportsDir
-
По поводу onLoad и onSave
Я наверное немного непонятно написал...
Я хочу чтобы ВМЕСТО диалога открытия и сохранения файла отчета вызывался мой метод, который я подцеплю.
А сейчас открываются диалоги.
Что -то типа
//connect(report, &LimeReport::ReportEngine::onLoad, this, &MainWindow::onReportLoad); вот так у меня почему-то не работает
connect(report, SIGNAL(onLoad(bool&)) , this, SLOT(onReportLoad(bool&)));
report->disableFileDialogs(true);
А в методе onReportLoad сам загружаю что нужно методами loadFromString или loadFromByteArray или loadFromFile.
-
Использование onLoad(),onSave()
Если в onLoad(bool& loaded) выполнить допустим loadFromString() и в loaded вернуть true то диалог не откроется, аналогично если в onSave() вызвать saveToString() то диалог не откроется.
Штрих коды
Данная функция доступна если к LimeReport подключить QZint и раскомментировать CONFIG +=zint в limereport.pro.
Печать завершения данных на каждой страннице
Мне представляется довольно сомнительной целесообразность этой функции, поскольку завершение данных подразумевает некоторое подведение итогов относительно группы данных.
Соответственно если этот банд будет печататься на каждой странице то итоговые данные там разместить не получится.
Выравнивание текста
У вас какая ОС ? А то у меня не получается воспроизвести Ваш скриншот. У меня с Вашим отчетом совсем другое
[вложение удалено администратором]
-
Использование onLoad(),onSave()
Да. Я попробовал. Все понятно.
По коду я посмотрел.
Если я правильно понял, результат возвращается как ссылка на bool из сигнала.
Насколько я этим вопросом интересовался - это так скажем недокументированное использование.
Ну да ладно. Вам виднее.
Штрих коды
Данная функция доступна если к LimeReport подключить QZint и раскомментировать CONFIG +=zint в limereport.pro.
Ок. Буду пробовать.
Печать завершения данных на каждой страннице
Мне представляется довольно сомнительной целесообразность этой функции, поскольку завершение данных подразумевает некоторое подведение итогов относительно группы данных.
Соответственно если этот банд будет печататься на каждой странице то итоговые данные там разместить не получится.
Не буду настаивать. Но, например, в Visual FoxPro можно было завести переменные в отчете и указать в настройках агрегатную функцию и параметры сброса (например sum() на каждую группу, или до конца отчета, тут же можно сделать и на страницу)
Выравнивание текста
У вас какая ОС ? А то у меня не получается воспроизвести Ваш скриншот. У меня с Вашим отчетом совсем другое
Win 7 x64 Rus Pro
Qt 5.4.2 mingw4.91 32bit
Вообще меня это тоже удивило, потому как настройки элементов полностью совпадают.
-
Печать завершения данных на каждой страннице
Мне представляется довольно сомнительной целесообразность этой функции, поскольку завершение данных подразумевает некоторое подведение итогов относительно группы данных.
Соответственно если этот банд будет печататься на каждой странице то итоговые данные там разместить не получится.
На самом деле ситуации бывают разные и требования у людей бывают порой совсем (со своей точки зрения) сумасшедшие. Однако такова жизнь. Не плохо было бы предусмотреть режим «ручного» заполнения отчёта. Как в 1С: выбираем банд, наполняем его инфой, выводим на страницу. Берём следующий и так до конца. При этом банды могут выводиться не последовательно друг за другом, а в порядке, следуемом логике отчёта.
Касательно же основного вопроса об итоговых данных. Можно создать переменные в отчёте и вставить их в итоговые ячейки. Итоговые суммы посчитать до отрисовки отчёта и присвоить значения переменным из отчёта перед его отрисовкой.
-
А у меня такой вопрос: а возможно ли создавать таблицы с переменным числом колонок, вычисляемым в момент отрисовки?
-
Если в мой отчет вставить раздел "Завершение данных, то он вставляется ниже "Нижнего колонтитула"
А если, делать в новом отчете, то разделы данных вставляются выше нижнего колонтитула.
-
У текстового элемента рамка есть, а толщину рамки настроить нельзя.
:(
-
А у меня такой вопрос: а возможно ли создавать таблицы с переменным числом колонок, вычисляемым в момент отрисовки?
По ссылке - как можно обратиться к элементу
http://limereport.ru/forum/index.php?topic=24.0
Не пробовал, но видимо только скриптом можно разрулить видимость.
Указать цвет элемента белый(цвет фона) и рамки убрать.
Если бы у элемента было свойство visible было бы проще.
-
Размеры указанные в настройках элемента уходят в минус при распечатке
Например, ширина текстового поля в дизайнере 20мм, а при распечатке, примерно, 18.8.
И поля страницы заметно больше получаются.
-
По ссылке - как можно обратиться к элементу
http://limereport.ru/forum/index.php?topic=24.0
Спасибо, добрый человек. Я как-то пропустил этот пост...
-
Новый фикс
1. Добавлена возможность печати заголовка данных на каждой странице
2. Добавлены колонки к заголовку данных
3. Добавлено свойство толщины рамки у элементов отчета
4. Сделал более толстую рамку выделения объекта в дизайнере
5. Добавлено свойство isVisible к элементам отчета (в инспекторе объектов не показывается, но доступно в скрипте)
6. AutoHeight поджимает границу к нижнему элементу если не установлено свойство keepBottomSpace
7. Добавлена возможность скругления углов у прямоугольника через свойство cornerRadius
8. Исправлена ошибка с порядком вставки бандов (для старых отчетов ничего не поменяется)
9. Исправлено уползание окна дизайнера при первом открытии.
[вложение удалено администратором]
-
Это просто праздник какой-то! :)
Скачал, скомпилировал.
Но есть замечания...
1. Сделал в своем отчете в заголовке данных две колонки.
Сформировал отчет в котором данных только на 1 колонку.
В итоге картинка в приложении
2. Толщина рамки у текстового элемента работает, но хотелось бы, чтобы граница объекта была толщиной в 1 точку, независимо от толщины рамки.
И в добавок к этому выделение толстого элемента опять практически не видно
Скрин в приложении.
Может быть выделять элементы каким-нибудь красно-желтым пунктиром
А в общем проект становится все лучше и лучше.
Спасибо. :)
[вложение удалено администратором]
[вложение удалено администратором]
-
Еще заметил...
1. Я думаю нужно запретить устанавливать в дизайнере количество колонок в заголовке данных больше чем колонок в самих данных.
А то ерунда получается.
2. Удобнее было бы, чтобы изменения в шаблоне отображались сразу же после изменения параметров в инспекторе объектов.
Приходится щелкать по шаблону, чтобы изменения вступили в силу. Утомляет чуток. :)
-
1. Написал скрипт
$S{
THIS.width = $D{details.Вес};
var color = new QColor('#DEB887')
THIS.backgroundColor = color;
}
Цвет устанавливается, а ширина нет.
2. Что за свойство splittable в разделе данных?
-
Еще вопрос
В слоте print
report->dataManager()->addModel(QString("details"), &reportModel, false);
Первый раз все проходит нормально.
Затем я меняю фильтр отбора у себя в форме.
Нажимай кнопку print
И на указанной строке все рушится.
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
terminate called after throwing an instance of 'LimeReport::ReportError'
what(): источник данных "details" уже существует !
Я понимаю что он существует.
Нужно тогда либо просто игнорировать добавление модели, либо старую молча отцепать и новую добавлять.
Потому как метод clearUserVariables() есть, а clearModel(const QString &name) - нет.
-
Еще...
Место для раздела "окончание данных" на странице есть, но раздел печатается на новом листе.
[вложение удалено администратором]
-
Толщина рамки у текстового элемента работает, но хотелось бы, чтобы граница объекта была толщиной в 1 точку, независимо от толщины рамки.
Это имеется ввиду в режиме создания отчета ?
THIS.width = $D{details.Вес};
У элементов отчета нет свойства width
Удобнее было бы, чтобы изменения в шаблоне отображались сразу же после изменения параметров в инспекторе объектов.
Приходится щелкать по шаблону, чтобы изменения вступили в силу. Утомляет чуток. :)
После заверщения редактирования значения нужно нажать Enter для того чтоб они применились или просто уйти на соседнее свойство
Что за свойство splittable в разделе данных
Это свойство говорит от том, что если банд целиком не влезает на страницу, то он может быть рассечен на части.
-
Это имеется ввиду в режиме создания отчета ?
Да
У элементов отчета нет свойства width
Очень жаль.
Я подумал, что смогу сделать из пустого закрашенного текстового элемента что-то типа гистограммы - колонка с текстовыми элементами разной длины.
Я думал, что можно обратиться к любому свойству, указанному в инспекторе объектов.
А Вы не могли бы опубликовать список свойств, которые можно использовать в скриптах?
После заверщения редактирования значения нужно нажать Enter для того чтоб они применились или просто уйти на соседнее свойство
Понял
-
Я думал, что можно обратиться к любому свойству, указанному в инспекторе объектов.
А его и в инспекторе объектов нет :) width находится в свойстве geometry, а geomerty для скрипта свойств не имеет
Я подумал, что смогу сделать из пустого закрашенного текстового элемента что-то типа гистограммы - колонка с текстовыми элементами разной длины.
Касательно гистограмм, в ближайшее время появится элемент чарт, в котором их можно будет делать
-
А хотфиксы как-то меняют версию программы? =)
-
Неа :)
-
Новая порция обновлений
1. Изменена рамка выделения объекта и курсоры во время изменения размеров
2. Исправлена ситуация, когда колонки выстраиваются в одну вместо заданого кол-ва
3. addModel теперь не выкидывает исключение, а просто заменяет модель.
[вложение удалено администратором]
-
1. Изменена рамка выделения объекта и курсоры во время изменения размеров
Класс. Спасибо.
2. Исправлена ситуация, когда колонки выстраиваются в одну вместо заданого кол-ва
Работает. Пока глюков не заметил
3. addModel теперь не выкидывает исключение, а просто заменяет модель.
Работает.
Сделайте, пожалуйста, равномерное вертикальное заполнение колонок.
Очень Вас прошу.
-
Добавите, пожалуйста в предпросмотр кнопки
Лист целиком.
Два листа
100%
И поле в котором показывается масштаб.
И я думаю нужно ограничить минимальный и максимальный масштаб, а то можно очень сильно умееньшить или увеличить.
Можно ли встроить предпросмотр в свой виджет?
Можно ли устанавливать доступность кнопок в панели предпросмотра?
И еще пришла мысль такая...
В инспекторе объектов свойства выделять по цвету.
Например так
Черным - доступные для редактирования
Синие - доступные только из скрипта (типа isVisible)
Зеленые доступные для редактирования и из скрипта.
Или не цветом, а какой-нибудь иконкой выделять.
А то многие так и не узнают что есть свойство isVisible, например.
И еще хочется менять поля страницы для четных/нечетных страниц.
Как это сделать?
-
В своем отчете переключил ориентацию страницы на ландшафт - переключилось.
Переключаю обратно на портрет - отображение шаблона переключилось, а в инспекторе объектов остался ландшафт.
И при переходе фокуса на сам шаблон ориентация меняется на ландшафтную.
-
Очередная порция изменений
1. Поправили залипающее значение выбираемое из списка
2. Добавлено равномерное заполнение колонок :) ( columnsFillDirection = VerticalUniform )
Корректность работы, для разноразмерных по высоте колонок, не гарантируется. Но в простых случаях должно работать.
Можно ли встроить предпросмотр в свой виджет?
Можно ли устанавливать доступность кнопок в панели предпросмотра?
И еще хочется менять поля страницы для четных/нечетных страниц.
Пока никак, но что-нибудь придумаем.
[вложение удалено администратором]
-
Очередная порция изменений
1. Поправили залипающее значение выбираемое из списка
2. Добавлено равномерное заполнение колонок :) ( columnsFillDirection = VerticalUniform )
Корректность работы, для разноразмерных по высоте колонок, не гарантируется. Но в простых случаях должно работать.
Все работает. Спасибо.
Теперь меня практически все устраивает. Остальное в принципе мелочи.
Если не секрет, какие планы у Вас на разработку?
-
Ближайшие планы:
Создание элемента позволяющего выводить графики и диаграммы
Добавление возможности вставлять диалоги в отчет
-
А из моих хотелок остатки будут в ближайшее время реализованы?
Вы мне ответьте по пунктам, чтобы я больше не приставал
1. Margin для всех 4 сторон
2. Поля для четных/нечетных страниц
3. Сетка
4. Встраивание предпросмотра в виджет
5. Доступность кнопок предпросмотра
6. Дополнительные кнопки масштаба в предпросмотре
7. Более точное соответствие размеров шаблона и при выводе на печать
И я еще думаю, что Вам стоит уже составить какое-нибудь кратное описание свойств/методом отчета и свойств доступных из скриптов.
А то получается - хочется изменить ширину элемента из скрипта, а оказывается нельзя.
И еще в дополнение вопросы и предложения
1. Можно ли как-то из скрипта обратиться к разделу в котором он находится, типа THIS.parent или THIS.band?
2. Сделать настройку дизайнера - Шрифт по умолчанию
-
1. Окончание данных почему-то переносится на следующую страницу, как я и писал уже.
На скриншоте видно. Это при заполнении Vertical
2. А вот при заполнении VerticalUniform заполняется вообще по полстраницы.
Нужно в этом режиме заполнять все страницы кроме последней так же как и в Vertical, а вот последнюю рассчитыватся данные пропорционально количеству колонок.
3. У меня 4 страницы отчета рендерятся render time = 3705. Это как мне кажется долго. Наверное нужно поковырять быстродействие.
[вложение удалено администратором]
-
qDebug() << filterText;
report->dataManager()->setReportVariable("filterString", filterText);
"Дата начала >= 29.01.2016
Дата окончания <= 29.01.2016
"
А в отчете выводится
"Дата начала >= 29.01.2016
Дата окончания"
-
Переменная обрабатывается странно
Для 1 страницы - смотрите приложение
Для 2 и 3 страницы выводится значение как положено.
Страница 2 из 3
Страница 3 из 3
Заполнение vertical, 2 колонки.
[вложение удалено администратором]
-
И на это дело у нас найдется хот фикс :)
1. Исправлена обработка нижнего колонтитула
2. Исправлен вывод данных содержащих символы "<" (особенности HTML)
3. Исправлено заполнение страницы в режиме VerticalUniform
1. Окончание данных почему-то переносится на следующую страницу, как я и писал уже.
На скриншоте видно. Это при заполнении Vertical
Это особенность заполнения Vertical. Поскольку, в этом режиме элементы вставляются до конца страницы
и только потом происходит переход к другой колонке, вставлять завершение просто некуда
3. У меня 4 страницы отчета рендерятся render time = 3705. Это как мне кажется долго. Наверное нужно поковырять быстродействие.
Это действительно крайне медлено :( У меня 15 страниц генерится за 772.
Тут надо смотреть все в комплексе, структуру отчета, скорость подачи данных да и производительность железа не на последнем месте.
Скорость генерации, как не трудно догадаться, сильно падает на медленных источниках данных.
Еще на скорость генерации влияет вариант сборки релиз или отладка.
Сколько по времени у Вас занимает генерация демо отчета "demoReport1_report_header_group_subdetail.lrxml" ?
По поводу ваших хотелок
1. Margin для всех 4 сторон
Сделаем
2. Поля для четных/нечетных страниц
Сделаем
3. Сетка
Сделаем
4. Встраивание предпросмотра в виджет
Сделаем
5. Доступность кнопок предпросмотра
Сделаем
6. Дополнительные кнопки масштаба в предпросмотре
Сделаем
7. Более точное соответствие размеров шаблона и при выводе на печать
Это к сожалению побороть практически невозможно
[вложение удалено администратором]
-
Последнее исправление работает. Спасибо
По быстродействию...
Отчет 2 страницы.
Release
libpng warning: iCCP: known incorrect sRGB profile
render time = 1807
Debug
libpng warning: iCCP: known incorrect sRGB profile
render time = 4150
Машина i5-4430 8Гб
ПО
Win 7 x64 Rus Pro
Qt 5.4.2 mingw4.91 32bit
Использую QSqlQueryModel заполняю из postgresql.
На момент печати модель уже создана и выведена на экран, т.е. полностью готова.
-
Можете мне кинуть Ваш шаблон отчета ?
-
В приложении отчет
[вложение удалено администратором]
-
Прогнали проект через профилировщик очевидных точек увеличения производительности найти не удалось.
-
Сразу хочу сказать, что я не большой знаток Qt...
Я посмотрел ваш код
BaseDesignIntf *BaseDesignIntf::cloneItemWOChild(ItemMode mode, QObject *owner, QGraphicsItem *parent)
{
BaseDesignIntf *clone = createSameTypeItem(owner, parent);
clone->setObjectName(this->objectName());
clone->setItemMode(mode);
clone->objectLoadStarted();
for (int i = 0; i < clone->metaObject()->propertyCount(); i++) {
if (clone->metaObject()->property(i).isWritable()){
clone->setProperty(clone->metaObject()->property(i).name(), property(clone->metaObject()->property(i).name()));
}
}
clone->objectLoadFinished();
return clone;
}
Вот тут тратиться 90% времени на рендеринг (по крайней мере, мне так кажется :) )
clone->setProperty(clone->metaObject()->property(i).name(), property(clone->metaObject()->property(i).name()));
Копирование одного элемента (BaseDesignIntf) идет несколько миллисекунд.
Я понимаю, что Q_PROPERTY штука очень интересная и достаточно универсальная, но это страшный тормоз.
Мне кажется, что Вы зря связались с Q_PROPERTY
Не могли бы Вы вкратце объяснить для чего вы используете клонирование элементов?
Как вообще работает рендеринг?
-
setProperty, на самом деле, не так много времени отъедает от процесса.
Этот механизм позволяет инициализировать объекты абсолютно неизвестных классов, единственное, что нужно знать, что это наследник QObject.
Время съедается тем, что происходит в процессе установки значения.
Я могу сказать, что мы немного покрутили код и сейчас cloneItem занимает 8,75% процентов времени.
Процесс рендеринга это, как раз и есть, клонирование шаблонных элементов и заполнение их реальными значениями.
[вложение удалено администратором]
-
Я говорил про cloneItemWOChild
У Вас в профайлере видно даже, что cloneItemWOChild занимает 0,09% и вызвано 1191 раз.
использование metaobject это всегда медленно.
-
cloneItemWOChild занимает 8.71%, при этом, чтение и запись пропертей занимает от этого времени 5,18%.
Можно, конечно, делать клонирование без пропертей, но это поможет увеличить производительность меньше чем на 5 процентов, а оно того стоит ?
-
Ок.
Вам видней, не буду спорить.
Буду надеяться на увеличение скорости в будущих релизах.
-
Еще предложение.
Сделайте, пожалуйста, в заголовке дизайнера отображение имени файла отчета.
Оказывается полное имя файла внизу выведено. Не заметил сразу. :)
-
Новый фикс
1. Покрутили производительность
2. Изменили выделение группы объектов (Выделение мышью области отчета с зажатым Shift )
3. Изменили копирование, вырезку и вставку объектов (Актуально для отчетов в шаблоне, которых много объектов)
4. Добавлено имя отчета, в случае загрузки из файла, совпадает с именем файла и выводится в заголовке окна.
Может использоваться для идентификации отчета при загрузке из БД
5. Добавлено свойство "startNewPage" у банда "Дата (Data)"
6. Оптимизировали вывод сообщений об ошибках (знак вопроса на тулбаре в окне предварительного просмотра)
ВНИМАНИЕ
7. В начиная с этой версии, элемент "Текст" по умолчанию не использует HTML.
Для включения поддержки HTML нужно использовать свойство allowHTML
[вложение удалено администратором]
-
А был седьмой хотфикс? Я как-то пропустил... =)
-
Не, не было :) видимо хотел выложить, архив сделал, а выложить не выложил :)
-
Следует ли какую-то подготовку производить перед printToPDF?
У меня после восьмого хотфикса эта функция вообще перестала сохранять документы.
-
Теперь значительно шустрее отчет работает.
Я думаю это правильное решение отключить HTML
А вот при выделении объектов с шифтом желательно рамку рисовать, а то непонятно выделяется или нет
А шрифт по умолчанию будет?
-
Есть несколько вопросов.
-есть шаблон, в нем есть DataSource с запросом. Как мне из кода поменять текст запроса, а потом его перестраивать? На данным момент приходится добавлять новый DataSource, но так же проблема с тем что нельзя удалить существующий DataSource в отчете.
- когда появиться возможность получения Widget Preview для вставки в свой Widget (окно не модально должно быть)?
- когда появиться возможность в Preview скрывать toolBar и menuBar?
-
-есть шаблон, в нем есть DataSource с запросом. Как мне из кода поменять текст запроса, а потом его перестраивать? На данным момент приходится добавлять новый DataSource, но так же проблема с тем что нельзя удалить существующий DataSource в отчете.
3. addModel теперь не выкидывает исключение, а просто заменяет модель.
-
svvord,
Следует ли какую-то подготовку производить перед printToPDF?
У меня после восьмого хотфикса эта функция вообще перестала сохранять документы.
Нет. Просто loadReport(), потом printToPDF(). Если не сложно, можно примерчик программы, где pdf не сохранаяется ?
GraninDm,
А шрифт по умолчанию будет?
Будет :)
А вот при выделении объектов с шифтом желательно рамку рисовать, а то непонятно выделяется или нет
Тут не совсем понятно :) Про какую рамку идет речь ? Рамка вокруг выделяемой области рисуется.
KorSA
Если источник данных создается в отчете, то подразумевается, что он будет зависить от переменных, передаваемых отчету.
Если источник данных внешний, то его можно зарегистрировать в отчете и потом делать с ним все, что угодно,
до того как будет вызван printReport() или previewReport().
- когда появиться возможность получения Widget Preview для вставки в свой Widget (окно не модально должно быть)?
- когда появиться возможность в Preview скрывать toolBar и menuBar?
как говорится ASAP
-
Во время выделения с шифтом, как в приложении
У меня рамка не рисуется и элементы не выделяется когда я их выделяю.
Они выделяются только когда я мышь отпущу.
[вложение удалено администратором]
-
GraninDm, Блин я запутался :) Давайте по порядку :)
Вы Shift зажали левую кнопку мыши тоже. Далее начинаете выделять обрасть и рамка вокруг этой области не появляется ?
-
Именно так. Не появляется.
-
Странно, а у меня появляется :)
-
Клянусь своей треуголкой!
Не появляется ;D
-
А можете скомпилять r1 из папки демо и бросить в меня ?
-
В debug?
Какие файлы кидать exe и dll?
-
Можно release желательно полный комплект, чтоб запустилось на чистой машине
-
Т.е. со всеми qt-шными dll?
В сообщении прицепить или как?
-
Ага прям все :) На файловый обменник можно бросить, в сообщении не пролезет.
-
А приватные сообщения работают?
А то я отсылаю, а в отосланных они не появляются.
-
Работают
Там галка есть сохранять копию в отправленных
-
GraninDm, Запускаю скомпилированную вами демку, у меня область выделения выглядит вот так. :o
У Вас по другому ? Я просто даже не знаю куда копать :)
[вложение удалено администратором]
-
Я понял, почему нет рамки!
Всю ночь думал :D
Я выделял с правого нижнего угла в левый верхний.
А Вы с левого верхнего в правый нижний.
Еще допишу...
Если начать вести выделение вверх влево, то рамки нет.
Не отпуская мышь ведем вправо вниз от точки начала выделения, и тут рамка появляется.
А при выделении ЛН->ПВ выделение ИНОГДА не срабатывает, особенно если перед этим выделять ЛВ->ПН
А если нажать на мышь и вести курсор, и после этого нажать шифт, то выделение начинается странно очень.
Так конечно нормальный человек выделять не будет, но тогда нужно игнорировать шифт при движении с зажатой кнопкой.
-
Понял :) Спасибо. Исправим
-
Нарисовалась проблема с печатью отчета.
Пробовал в виртуалке и у одного клиента на машине.
Win XP принтер один сетевой.
Превью есть. Но при нажатии кнопки печать, окно выбора принтера не появляется.
-
Вот это странно, там метод проще некуда
QPrinter printer(QPrinter::HighResolution);
QPrintDialog dialog(&printer,QApplication::activeWindow());
if (dialog.exec()==QDialog::Accepted){
......
}
Попробуйте на этой машине тестовую программу запустить, которая просто диалог принтера будет вызывать
-
Очередная порция изменений
Исправили выделение области
[вложение удалено администратором]
-
QPrinter printer(QPrinter::HighResolution);
if(printer.isValid()){
QMessageBox::information(this,
tr("Printer"),
printer.printerName());
}
QPrintDialog dialog(&printer,QApplication::activeWindow());
dialog.exec()==QDialog::Accepted;
На моем компе выводится имя принтера.
В виртуалке выводится пустое окно.
В виртуалке создал локальный принтер
Все равно его не видно в программе.
Ставил ScreenResolution для проверки - ничего не поменялось.
-
Это пример из кутишной документации, ради интереса, попробуйте.
QPrinter printer;
QPrintDialog *dialog = new QPrintDialog(&printer, this);
dialog->setWindowTitle(tr("Print Document"));
if (dialog->exec() != QDialog::Accepted)
return;
-
Не появляется окно с выбором принтера :(
-
Видать Qt не видит принтер :(
А если поставить виртуальный принтер например fineprint ?
-
Завтра попробую. Сегодня некогда.
-
Проверьте наличие windowsprintersupport.dll должна лежать в папке printsupport
-
Действительно!
Проблема была в этой dll.
:-\
-
Еще пожелания и замечания теперь по 1.3.9.
1. Геометрия в инспекторе указывается как [x,y] высота x ширина.
Я думаю не совсем удобно. Нужно так [x,y] ширина x высота.
2. Копирование объекта
Копируем Ctrl+C
Выделаем тот же раздел
Вставляем Ctrl+X. Объект встал на то же место. Может лучше сдвинуть на несколько точек вправо вниз?
Если я это проделал в DataBand, то после вставки, если захватить только что вставленный элемент мышью, то перемещается и элемент и раздел.
3. Если выделать dababand, нажать Ctrl и переместить мышью элемент в разделе, то опять перемещается элемент и раздел.
-
Еще пожелание...
Хотелось бы чтобы редактор текстового элемента закрывался по Ctrl+Enter.
-
2. Копирование объекта
Копируем Ctrl+C
Выделаем тот же раздел
Вставляем Ctrl+X. Объект встал на то же место. Может лучше сдвинуть на несколько точек вправо вниз?
Если я это проделал в DataBand, то после вставки, если захватить только что вставленный элемент мышью, то перемещается и элемент и раздел.
А если выделен не раздел, а другой объект внутри раздела, то при вставке можно выравнивать верхний левый край вставляемого по верхнему правому краю выделенного. Это упростит создание табличных данных.
-
Если я это проделал в DataBand, то после вставки, если захватить только что вставленный элемент мышью, то перемещается и элемент и раздел.
Мы на https://github.com/fralx/LimeReport (https://github.com/fralx/LimeReport) обосновались :) Там есть исправление этого бага. А так же :
1. Редактор текста закрывается по Ctrl+Enter
2. Добавлена сетка
3. Добавлен шрифт по умолчанию
4. Добавлена функция примагничивания объектов при перемещении.
А если выделен не раздел, а другой объект внутри раздела, то при вставке можно выравнивать верхний левый край вставляемого по верхнему правому краю выделенного. Это упростит создание табличных данных.
Это если один элемент выделен, а если несколько то просто смещать ?
-
Это если один элемент выделен, а если несколько то просто смещать ?
По последнему справа. Думаю так =)