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

Author Topic: Сборка под MSVS 15 Qt 4.8.7  (Read 3875 times)

snakeZ

  • Newbie
  • *
  • Posts: 4
    • View Profile
Сборка под MSVS 15 Qt 4.8.7
« 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, еще что-то, создает папки, но не либу. Подозреваю, что нужно установить какие-то параметры или переменные окружения, но какие - угадать не могу.

Не будете ли вы так добры проинструктировать или (если такие инструкции уже есть) дать ссылку?

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Re: Сборка под MSVS 15 Qt 4.8.7
« Reply #1 on: June 01, 2017, 09:59:48 PM »
Самый простой способ собирать qt проекты это использовать qtcreator, но можно и из командной строки. 
После qmake нужно запустить nmake входящий в состав msvc.

Subst

  • Sr. Member
  • ****
  • Posts: 444
    • View Profile
Re: Сборка под MSVS 15 Qt 4.8.7
« Reply #2 on: June 02, 2017, 01:10:43 PM »
Блин, Алекс...
Ни разу не пришло в голову собрать LM из Creator'а  ;D

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Re: Сборка под MSVS 15 Qt 4.8.7
« Reply #3 on: June 02, 2017, 05:04:32 PM »
Subst это все из-за того, что ты qt из исходников собираешь ;-)

snakeZ

  • Newbie
  • *
  • Posts: 4
    • View Profile
Re: Сборка под MSVS 15 Qt 4.8.7
« Reply #4 on: June 06, 2017, 10:52:51 AM »
Все замечательно, собралось.

По ходу обнаружилось, что если собрать Qt в одном месте, а потом перенести в другое, то LimeReport не компилируется, поскольку достает старый путь к Qt откуда-то из Qt-файлов. Это не очень радует, т.к. мы практикуем однократную (10-часовую!) сборку Qt на одном компе и потом копирование по всему офису, а конкретные программисты кладут это Qt по разным папкам у себя. Может, есть какая-то настройка?

Но если все собирать у себя, то собралось.

Дальше вопросы вылезли.

1. Как избавиться от QtZint? Нам штрих-коды не нужны, не хотелось бы, чтобы в инсталлированной программе был мертвый груз.

2. Как сделать отчет на QAbstractDataModel (кстати, что такое QAbstractDataModel? Это видимо QAbstractItemModel с опечаткой?) В ваших примерах в LRDemo_r1.exe и в .pdf есть фрагмент:

Code: [Select]
    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. Я создал такую:

Code: [Select]
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() пустая, но она даже не вызывается.

Subst

  • Sr. Member
  • ****
  • Posts: 444
    • View Profile
Re: Сборка под MSVS 15 Qt 4.8.7
« Reply #5 on: June 06, 2017, 01:49:27 PM »
По порядку.

Пути 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

Третий вопрос - многАбукаФФ, сейчас некогда

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Re: Сборка под MSVS 15 Qt 4.8.7
« Reply #6 on: June 06, 2017, 03:16:35 PM »
Quote
Как сделать отчет на QAbstractDataModel (кстати, что такое QAbstractDataModel? Это видимо QAbstractItemModel с опечаткой?)
Да вы правы это именно QAbstractItemModel :), спасибо, что поправили.
И соответственно, любая модель, реализующая этот интерфейс, может быть доступна в LimeReport.
Quote
- ну, собственно, а как эту модель теперь активировать? С помощью LRDemo_r1.exe какие кнопки ни нажимай, "value1", "value2" не увидишь.
Прикладываю отчет в котором этот источник задействован (string_list_demo.lrxml)
Quote
Мне нужно что-то типа:

simple_list.lrxml

- но чтобы бралось не из SQL-БД, а из моих данных в памяти.
Как показывает практика, наиболее простой способ передачи данных из приложения в LimeReport это использование callback источников данных.
Суть их использования в следующем :
В своем приложении создаете слот аналогичный следующему:
Code: [Select]
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 следующим образом :
Code: [Select]
    callbackDatasource = report->dataManager()->createCallbackDatasource("oneSlotDS");
    connect(callbackDatasource, SIGNAL(getCallbackData(LimeReport::CallbackInfo,QVariant&)),
            this, SLOT(slotOneSlotDS(LimeReport::CallbackInfo,QVariant&)));

Вот собственно и все.


 

snakeZ

  • Newbie
  • *
  • Posts: 4
    • View Profile
Re: Сборка под MSVS 15 Qt 4.8.7
« Reply #7 on: June 08, 2017, 10:08:28 AM »
Еще раз спасибо, всё получилось, как хотелось.