LimeReport Forum
General Category | Основное => Discussion | Обсуждение => Topic started by: snakeZ on June 01, 2017, 09:56:41 am
-
У меня Microsoft Visual Studio 2015 и сборка Qt 4.8.7 под MSVS.
Подскажите, как собрать Limereport в такой конфигурации?
Из Git я выкачал сорцы, где есть Makefile и .pro файл, на это, видимо, надо как-то натравить qmake, но qmake мне пользоваться не приходилось (Qt мы собираем MSVS). Попытка просто "в лоб" qmake блабла.pro пишет Debug, еще что-то, создает папки, но не либу. Подозреваю, что нужно установить какие-то параметры или переменные окружения, но какие - угадать не могу.
Не будете ли вы так добры проинструктировать или (если такие инструкции уже есть) дать ссылку?
-
Самый простой способ собирать qt проекты это использовать qtcreator, но можно и из командной строки.
После qmake нужно запустить nmake входящий в состав msvc.
-
Блин, Алекс...
Ни разу не пришло в голову собрать LM из Creator'а ;D
-
Subst это все из-за того, что ты qt из исходников собираешь ;-)
-
Все замечательно, собралось.
По ходу обнаружилось, что если собрать Qt в одном месте, а потом перенести в другое, то LimeReport не компилируется, поскольку достает старый путь к Qt откуда-то из Qt-файлов. Это не очень радует, т.к. мы практикуем однократную (10-часовую!) сборку Qt на одном компе и потом копирование по всему офису, а конкретные программисты кладут это Qt по разным папкам у себя. Может, есть какая-то настройка?
Но если все собирать у себя, то собралось.
Дальше вопросы вылезли.
1. Как избавиться от QtZint? Нам штрих-коды не нужны, не хотелось бы, чтобы в инсталлированной программе был мертвый груз.
2. Как сделать отчет на QAbstractDataModel (кстати, что такое QAbstractDataModel? Это видимо QAbstractItemModel с опечаткой?) В ваших примерах в LRDemo_r1.exe и в .pdf есть фрагмент:
QStringList simpleData;
simpleData << "value1" << "value2" << "value3";
QStringListModel* stringListModel = new QStringListModel();
stringListModel->setStringList(simpleData);
report->dataManager()->addModel("string_list",stringListModel,true);
- ну, собственно, а как эту модель теперь активировать? С помощью LRDemo_r1.exe какие кнопки ни нажимай, "value1", "value2" не увидишь.
Мне нужно что-то типа:
simple_list.lrxml
- но чтобы бралось не из SQL-БД, а из моих данных в памяти. Подозреваю, что надо заменить $D{customers.CompanyName} в simple_list.lrxml на что-то типа $D{string_list.CompanyName}? Но в QStringListModel нет колонок. Видимо, нужен QAbstractTableModel. Я создал такую:
class AbstractTableModel: public QAbstractTableModel
{
public:
AbstractTableModel()
{
}
int columnCount(const QModelIndex &parent) const { return 3; }
int rowCount(const QModelIndex &parent) const { return 4; }
virtual QVariant data(const QModelIndex &index, int role) const
{
return QVariant();
}
};
......
QAbstractTableModel *qatm= new AbstractTableModel;
report->dataManager()->addModel("table_list", qatm,true);
потом заменил в simple_list.lrxml customers на table_list, и попытался все впихнуть в свою программу. Получаю сообщения: "Field table_list.CompanyName not found". Понятно, что у меня функция data() пустая, но она даже не вызывается.
-
По порядку.
Пути QT при сборке прописываются жестко в qmake, есть способы убежать от этого. Первое - смотри в сторону qt.conf
http://doc.qt.io/qt-5/qt-conf.html
Второй путь - найди софтину qtbinpatcher.exe, ну или напиши - вышлю, где-то было вроде, но не помню по поводу совместимости с версиями QT
Далее
QtZint убрать очень легко, в файле common.pri (LimeReport_src_path/common.pri) закоменть строку CONFIG += zint
Третий вопрос - многАбукаФФ, сейчас некогда
-
Как сделать отчет на QAbstractDataModel (кстати, что такое QAbstractDataModel? Это видимо QAbstractItemModel с опечаткой?)
Да вы правы это именно QAbstractItemModel :), спасибо, что поправили.
И соответственно, любая модель, реализующая этот интерфейс, может быть доступна в LimeReport.
- ну, собственно, а как эту модель теперь активировать? С помощью LRDemo_r1.exe какие кнопки ни нажимай, "value1", "value2" не увидишь.
Прикладываю отчет в котором этот источник задействован (string_list_demo.lrxml)
Мне нужно что-то типа:
simple_list.lrxml
- но чтобы бралось не из SQL-БД, а из моих данных в памяти.
Как показывает практика, наиболее простой способ передачи данных из приложения в LimeReport это использование callback источников данных.
Суть их использования в следующем :
В своем приложении создаете слот аналогичный следующему:
void MainWindow::slotOneSlotDS(LimeReport::CallbackInfo info, QVariant &data)
{
QStringList columns;
columns << "Name" << "Value" << "Image";
switch (info.dataType) {
case LimeReport::CallbackInfo::RowCount:
data = 4;
break;
case LimeReport::CallbackInfo::ColumnCount:
data = columns.size();
break;
case LimeReport::CallbackInfo::ColumnHeaderData: {
data = columns.at(info.index);
break;
}
case LimeReport::CallbackInfo::ColumnData:
if (info.columnName == "Image")
data = QImage(":/report//images/logo32");
else {
data = info.columnName+" "+QString::number(info.index);
}
break;
default: break;
}
}
Далее подключаете это дело к LimeReport следующим образом :
callbackDatasource = report->dataManager()->createCallbackDatasource("oneSlotDS");
connect(callbackDatasource, SIGNAL(getCallbackData(LimeReport::CallbackInfo,QVariant&)),
this, SLOT(slotOneSlotDS(LimeReport::CallbackInfo,QVariant&)));
Вот собственно и все.
-
Еще раз спасибо, всё получилось, как хотелось.