11
« on: March 11, 2022, 04:00:41 pm »
Всем доброго дня.
Возможно комуто информация окажется полезной, т.к. у меня на понимание этого ушло некоторое время.
Мне потребовалось в качестве источника данных в отчете использовать существующую модель (QSqlTableModel), подключенную к QTableView. Программа, над которой я работаю, включает поддержку нескольких языков UI. Для заполнения заголовков QTableView я использую model()->setHeaderData(..).
Но вот засада - LimeReport для идентификации колонок, в источнике данных, использует названия из заголовка модели. Соответсвенно при смене языка UI меняется и текст в заголовках таблицы, в результате отчет не может сформироваться корректно.
Я не нашел описания этого момента в документации. Путем анализа исходников библиотеки LimeReport выяснилось - первым делом она пытается получить название колонки используя Qt::UserRole, если это название пустое, тогда библиотека берет название из Qt::DisplayRole.
Нехитрый код помогает избежать казусов с переключением языка UI и сменой названий колонок:
for(int i=0; i < model->record().count(); i++) {
model->setHeaderData(i, Qt::Horizontal, model->headerData(i, Qt::Horizontal, Qt::DisplayRole), Qt::UserRole);
}