Alexander Dymo
cloudtemple@mksat.net
Phil Thompson
phil@river-bank.demon.co.uk
ОлегБаталов
olegbatalov@mail.ru
Перевод на русский язык
Руководство программиста Как использовать &kugar; в ваших программах для создания отчётов Существуют несколько способов использования &kugar; Создать временный файл и заполнить его данными, организованными согласно Определению типа документа (DTD) KugarData. Затем вызвать в командной оболочке kugar ( kugar ) для предварительного просмотра и распечатки отчёта. Подробноt описание смотрите в разделе Использование оболочки &kugar; для предварительного просмотра отчётов Использовать &kugar; непосредственно в коде приложения. Смотрите подробности в разделе Использование классов &kugar; в отчётах Создать модуль дизайнера &Qt;, и использовать его для создания приложений &GUI; в дизайнере и подключать его к программе динамически. Подробности смотрите в разделе Создание модулей дизайнера &Qt;. Два последних метода приемлемы для разработчиков &Qt; и &kde;, но &kugar; спроектирован генератором отчётов, независящим от языка программирования и/или IDE. Он использует формат &XML; для описания шаблона отчёта и фала данных. Так что любая программа может произвести вывод в в формат файла данных &kugar;, как описано в KugarData DTD или даже в формат файла шаблона отчёта (см. KugarTemplate DTD). Оболочка &kugar; (программа просмотра отчётов) может использоваться для предварительного просмотра и печати созданных отчётов. Использование оболочки &kugar; для предварительного просмотра отчётов Способ создания и предварительного просмотра (печати) отчёта состоит из: Создания с помощью &kudesigner; шаблона отчёта. Создания файла данных со значениями столбцов для секций в отчёте. Используя KugarData DTD для производства корректных файлов данных. Выполнения оболочки &kugar; для предварительного просмотра и печати отчёта. Например, для этого в языке C или C++ вызовите: system(). Не забудьте включить файл stdlib.h. Использования в отчётах классов &kugar; Библиотека &kugar; включает два класса визуальных элементов для использования. Класс KReportViewer предназначен для разработчиков &kde;. Он поддерживает систему печати &kde; и локализацию &UNIX; через вызовы функции i18n(). MReportViewer предназначен для разработчиков &Qt; и предоставляет реальную кросс+платформенность. Он может использоваться не только на платформах &UNIX;, но также и на &Windows; и &MacOS;. Чтобы создать программу, использующую библиотеку &kugar;, она должна быть связана с разделяемой библиотекой libkugar.so, которая обеспечивает работу &kugar; на всех платформах &UNIX;. Включить файлы kugarqt.h и kugar.h для программ &Qt; и &kde; соответственно. Для подробных примеров использования классов &kugar;, смотрите каталог /shell в исходных текстах &kugar;. MReportViewer (а также KReportViewer) содержат несколько открытых методов, которые можно использовать. void renderReport Вывести отчёт на экран. void printReport Вызвать диалог печати для распечатки отчёта. void clearReport Очистить отчёт на экране и удалить его данные. Вызывайте его перед открытием нового отчёта. bool setReportData const QString &data_file_name Установить данные отчёте из файла data_file_name. bool setReportData const QIODevice &data_io_device Установить данные отчёта из файла data_io_device. Устройство IO может быть любым преемником класса QIODevice. Например, для получения записей непосредственно из базы данных, создайте преемника QIODevice и переопределите у него необходимую функциональность. bool setReportTemplate const QString &template_file_name Установить шаблон отчёта из файла template_file_name bool setReportTemplate const QIODevice &template_io_device Установить шаблон отчёта из файла template_io_device. Устройство IO может быть любым преемником класса QIODevice. Например, для получения шаблона отчёта из сети или базы данных, создайте преемника QIODevice и переопределите у него необходимую функциональность. Создание модуля дизайнера &Qt; Этот код примера создан как дополнение к модулю дизайнера. Код ниже создаёт модуль для графического элемента &kde; KReportViewer. Если желателен графический элемент &Qt;, замените KReportViewer на MReportViewer и kugar.h на kugarqt.h в коде модуля. Использование модуля Модули дизайнера позволят использовать Дизайнер &Qt; для помещения графического элемента KReportViewer в окно, и корректно просматривать его. Программы, которые используют этот модуль, должны быть динамически с ним связаны. Соответствующая библиотека называется libkugar_plugin.so. Графические элементы или диалоги, которые включают графический элемент KReportViewer должны включать <kugar.h> в реализацию и иметь предварительно описание класса class KReportViewer. Включения могут быть сделаны с помощью Исследователь объектов дизайнера &Qt; (вкладка источник). Для создание модуля выполните: qmake kugar_plugin.pro make Код модуля Код модуля находится в трёх файлах: kugar_plugin.h kugar_plugin.cpp kugar_plugin.pro A header file for KugarWidgetPlugin, QWidgetPlugin successor; A source file for KugarWidgetPlugin, QWidgetPlugin successor; Project file for QMake utility. kugar_plugin.h #include <qwidgetplugin.h >> class KugarWidgetPlugin:public QWidgetPlugin { public: KugarWidgetPlugin (); QStringList keys () const; QWidget *create (const QString & classname, QWidget * parent = 0, const char *name = 0); QString group (const QString &) const; QIconSet iconSet (const QString &) const; QString includeFile (const QString &) const; QString toolTip (const QString &) const; QString whatsThis (const QString &) const; bool isContainer (const QString &) const; }; kugar_plugin.cpp #include "kugar_plugin.h" #include <kugar.h> static const char *kugar_pixmap[] = { "22 22 127 2", ".d c #000000", ".c c #131313", ".b c #282828", ".a c #434241", ".e c #4e463a", ".# c #595551", ".G c #66553b", "#F c #68635f", "#R c #6b4f23", "#q c #6e6862", "#M c #6f5229", ".n c #6f6146", ".w c #735310", ".V c #755c2a", ".I c #775f34", ".0 c #77694a", "#n c #7e6434", ".o c #806f50", "#C c #835d2d", ".P c #837c75", "#B c #85653a", "#k c #85827e", ".x c #866d46", ".U c #877967", ".X c #888888", ".F c #89724d", "#x c #8b6d2a", ".S c #8d7759", ".z c #8e733b", "#L c #906e49", "#Q c #947b56", ".r c #948058", ".J c #957844", ".4 c #987736", ".q c #998969", ".k c #999897", ".R c #9a8a75", "#i c #9f8348", "#I c #a37c4b", ".u c #a38d66", ".E c #a58558", "#A c #a8834b", ".s c #a9967a", ".t c #aa9467", ".C c #ae9f8d", "#6 c #afa49d", "#5 c #afa9a4", "#W c #b18e4d", ".K c #b1935a", ".B c #b39660", "#V c #b49866", "#a c #b49d6c", "## c #b49d72", ".j c #b5b4b4", "#0 c #b7a597", ".O c #b9b1a9", ".L c #bb9c61", ".M c #bb9e6b", ".A c #bca778", "#j c #bea46b", ".T c #bfb37d", ".v c #c0b391", ".W c #c3a262", ".i c #c4c4c4", "#m c #c5b7aa", "#8 c #c69f80", ".D c #c6b79b", "#3 c #c7a589", ".7 c #c7a76c", "#u c #c7bbaf", ".6 c #c8ad74", "#7 c #c8b7a9", "#r c #c8beb5", ".m c #c8c8c8", "#U c #cbad96", "#f c #ccb681", "#h c #cdac6c", "#P c #cdb49f", "#X c #cdb8a6", "#H c #ceb7a4", ".y c #ceb892", ".N c #cecac3", "#Z c #cfb16f", "#O c #cfbdad", ".Z c #cfc7c0", "#w c #d0bcab", ".5 c #d1ad6b", "#s c #d1bfb1", ".h c #d5d5d5", "#l c #d6cdc6", "#D c #d8b36e", ".H c #dac592", "#t c #dbb977", ".g c #dcdcdc", ".1 c #e0dcc1", ".f c #e0e0df", "#1 c #e3c8b1", "#S c #e4cdb9", ".3 c #e4d9a3", "#4 c #e6c1a1", "#2 c #e7c4a5", "#K c #e9c179", "#g c #e9c47e", "#Y c #e9c8ac", ".2 c #eae6c0", "#T c #ebcdb3", ".Q c #ebd4b9", "#E c #ecca87", "#z c #ecd799", ".l c #ececeb", "#G c #efd7c2", "#e c #efe3ab", ".8 c #efe8e3", "#v c #f1dcca", "#. c #f2e2d4", ".p c #f4f4f4", "#y c #f5daa0", "#J c #f6cf7f", ".9 c #f7ede4", "#p c #f9d995", ".Y c #fcf9f6", "#d c #fefcc5", "#c c #fefdda", "#b c #fefee1", "#N c #ffd685", "#o c #fff0a9", "Qt c #ffffff", "QtQtQtQtQtQt.#.a.a.a.b.b.b.c.c.d.d.dQtQtQtQt", "QtQtQtQtQtQt.e.f.g.g.f.g.g.h.i.j.d.k.dQtQtQt", "QtQtQtQtQtQt.a.gQtQtQtQtQtQt.l.f.c.m.k.dQtQt", "QtQtQtQtQt.n.n.n.n.n.o.g.pQtQt.l.bQt.m.k.dQt", "QtQtQt.q.q.r.q.s.t.r.q.u.u.g.pQt.a.fQt.m.k.d", "QtQt.s.s.v.w.x.y.y.t.z.A.t.B.i.p.#.a.b.c.d.d", "Qt.C.C.D.E.F.G.A.H.F.I.J.K.L.M.i.p.l.N.O.P.d", "Qt.s.v.Q.q.R.S.T.A.R.U.V.L.W.W.X.g.Y.f.Z.k.d", ".0.s.t.Q.1.U.R.2.3.S.U.4.5.6.6.7.j.8.9#..O.d", ".G##.V#a#b.1#c#c#d#e#f#g#h#i#j.W#k#l.9#.#m.d", ".G.4.F#n#c#c#c#d#d#o#p#g.x.w#i.L#q#r#.#.#s.d", ".e.J.J.I.3#d.H#j.6#f#p#t#n.w.E.L#q#u#.#v#w.d", ".G.A#x.z#y#z#A#B#B#C#D#E.4.4.6#h#F#m#v#G#H.d", ".o.s.A#j#E#t#I#I#I#C#A#J#p#p#K#t#F#m#v#G#H.d", "Qt##.A.6.7#I#I#A.E#L#M.W#N#J#K.a.U#O#G.Q#P.d", "Qt#a.M.L.J#A#I.4.E#Q.x#R#D#J#g.#.C#S.Q#T#U.d", "QtQt#V.K.z#Q.s.S.x.S#B#M#W#E.a.U#X.Q#T#Y#U.d", "QtQtQt.M#i#B.r#Q#Q.r#Q.z#Z.a#q#0#1#T#Y#2#3.d", "QtQtQtQtQt#j.L.L.W.5#t.a.#.U#0#1#T#Y#2#4#3.d", "QtQtQtQtQtQt.d#F#q#q#q.P.C#O#S.Q#T#Y#2#4#3.d", "QtQtQtQtQtQt.d#5#5#6#6#0#7#w#H#P#U#U#3#3#8.d", "QtQtQtQtQtQt.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d" }; KugarWidgetPlugin::KugarWidgetPlugin () { } QStringList KugarWidgetPlugin::keys () const { QStringList list; list << "KReportViewer"; return list; } QWidget* KugarWidgetPlugin::create (const QString & key, QWidget * parent, const char *name) { if (key == "KReportViewer") return new KReportViewer (parent, name); return 0; } QString KugarWidgetPlugin::group (const QString & feature) const { if (feature == "KReportViewer") return "Display"; return QString::null; } QIconSet KugarWidgetPlugin::iconSet (const QString &) const { return QIconSet (QPixmap (kugar_pixmap)); } QString KugarWidgetPlugin::includeFile (const QString & feature) const { if (feature == "KReportViewer") return "kugar.h"; return QString::null; } QString KugarWidgetPlugin::toolTip (const QString & feature) const { if (feature == "KReportViewer") return "Kugar report viewer widget"; return QString::null; } QString KugarWidgetPlugin::whatsThis (const QString & feature) const { if (feature == "KReportViewer") return "A widget to view xml reports"; return QString::null; } bool KugarWidgetPlugin::isContainer (const QString &) const { return FALSE; } Q_EXPORT_PLUGIN( KugarWidgetPlugin ) kugar_plugin.pro SOURCES += kugar_plugin.cpp HEADERS += kugar_plugin.h DESTDIR = $(QTDIR)/plugins/designer TARGET = kugar_plugin target.path=$$plugins.path isEmpty(target.path):target.path=$$QT_PREFIX/plugins PROJECTNAME = KugarPlugin TEMPLATE = lib CONFIG += qt warn_on release plugin unix:LIBS += -lkugar LANGUAGE = C++