Alexander Dymo
cloudtemple@mksat.net
Phil Thompson
phil@river-bank.demon.co.uk
&erik.kjaer.pedersen.role;
Guide for programmører Hvordan &kugar; kan bruges til at lave rapporter i dine egne program Der er flere forskellige måder at bruge &kugar; Lav en midlertidig fil og fyld den med data, organiseret ifølge KugarData dokumenttypedefinitionen. Kald derefter kugar-skalkommandoen kugar for at forhåndsvise og udskrive rapporten. Se Brug &kugar;-skallen til at forhåndsvise rapporter for en detaljeret beskrivelse. Brug &kugar; direkte i programmets kode. Se Brug af &kugar;-klasser til rapporter for en detaljeret beskrivelse. Lav et &Qt; Designer plugin, brug det til at bygge programmets grafiske grænseflade i Designer, og link det dynamisk til programmet. Se Lav et &Qt; Designer plugin for en detaljeret beskrivelse. De sidste to måder er nyttige for &Qt;- og &kde;-udviklere. Men &kugar; er konstrueret til at være en rapportgenerator som er uafhængig af programsprog og/eller integreret udviklingsmiljø. Den bruger &XML;-formatet til at beskrive rapportskabeloner og datafiler. Så hvilket som helst program kan oprette uddata på &kugar;s datafilformat som beskrevet i KugarData DTD, eller til og med i rapportskabelonformat (se KugarTemplate DTD). En &kugar;-skal (rapportviser) kan bruges til at forhåndsvise og udskrive de genererede rapporter. Brug af &kugar;-skallen til at forhåndsvise rapporter Måden at oprette og forhåndsvise (udskrive) en rapport er: Lav en rapportskabelon med &kudesigner; Lav en datafil med søjleværdier for detaljebånd i rapporten. Brug KugarData DTD til at lave rigtige datafiler. Kør &kugar;-skallen for at forhåndsvise og udskrive en rapport. For eksempel gør dette med sprogene C eller C++, kald: system(). Glem ikke at inkludere stdlib.h. Brug &kugar;s klasser til rapporter &kugar;-biblioteket inkluderer to grafiske kontroller som kan bruges. Klassen KReportViewer er konstrueret for &kde;-udviklere. Den understøtter &kde;'s udskriftssystem og oversættelse under &UNIX; via i18n()-kald. Klassen MReportViewer er konstrueret for &Qt;-udviklere og sørger for rigtig platformsuafhængighed. Den kan ikke kun bruges på &UNIX;-platforme, men også på &Windows; og &MacOS;. For at bygge et program som bruger &kugar;-biblioteket, skal det linkes med det delte bibliotek libkugar.so, som kommer med &kugar;-distributioner på alle &UNIX;-platforme. Deklarationsfiler er kugarqt.h og kugar.h for de respektive &Qt;- og &kde;-programmer. For et detaljeret eksempel på hvordan &kugar;-klasser kan bruges, kig i mappen /shell i &kugar;s kildekode. MReportViewer (og også KReportViewer) indeholder flere offentlige metoder som kan bruges. void renderReport Viser rapporten på skærmen. void printReport Kalder udskriftsdialogen for at udskrive rapporten. void clearReport Rydder rapporten på skærmen og frigør rapportdata. Kald dette inden en ny rapport åbnes. bool setReportData const TQString &datafilnavn Henter rapportdata fra filen datafilnavn. bool setReportData const TQIODevice &data io-enhed Henter rapportdata fra filen data io-enhed. I/O-enheden kan være hvilken som helst klasse afledt fra klassen TQIODevice. For eksempel for direkte at hente poster fra databasen, opret en afledt klasse fra TQIODevice og omdefinér alle nødvendige funktioner. bool setReportTemplate const TQString &skabelonfilnavn Henter rapportskabelon fra filen skabelonfilnavn. bool setReportTemplate const TQIODevice &skabelon_io_enhed Sætter rapportskabelon fra filen skabelon_io_enhed. I/O-enheden kan være en hvilken som helst klasse afledt fra klassen TQIODevice. For eksempel for at hente en rapportskabelon direkte fra netværket eller en database, opret en afledt klasse fra TQIODevice og omdefinér alle nødvendige funktioner. Lav et &Qt; Designer plugin Dette er eksempelkode på hvordan et plugin til Designer laves. Koden nedenfor laver et plugin for en &kde; KReportViewer grafisk kontrol. Hvis en &Qt; grafisk komponent ønskes, erstattes KReportViewer med MReportViewer og kugar.h med kugarqt.h i pluginkoden. Brug af plugin Designer-plugin gør at &Qt; Designer kan bruges til at placere den grafiske kontrol KReportViewer i et vindue, og forhåndsvise den på en rigtig måde. Programmer som bruger dette plugin skal linkes dynamisk med det. Tilsvarende biblioteker hedder libkugar.so. Grafiske kontroller eller dialoger som indeholder kontrollen KReportViewer skal inkludere <kugar.h> i en implementering og indeholde deklarationen class KReportViewer. Det går at inkludere ved hjælp af &Qt; Designers objektudforsker (kildekodefanebladet). For at bygge pluginnet køres: qmake kugar_plugin.pro make Pluginkode Pluginkoden består af tre filer: kugar_plugin.h kugar_plugin.cpp kugar_plugin.pro En deklarationsfil for KugarWidgetPlugin, efterfølgeren til QWidgetPlugin. En kildekodefil for KugarWidgetPlugin, efterfølgeren til QWidgetPlugin. Projektfil for værktøjet Qmake. kugar_plugin.h #include <qwidgetplugin.h> class KugarWidgetPlugin:public QWidgetPlugin { public: KugarWidgetPlugin (); QStringList keys () const; TQWidget *create (const TQString & classname, TQWidget * parent = 0, const char *name = 0); TQString group (const TQString &) const; QIconSet iconSet (const TQString &) const; TQString includeFile (const TQString &) const; TQString toolTip (const TQString &) const; TQString whatsThis (const TQString &) const; bool isContainer (const TQString &) 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; } TQWidget* KugarWidgetPlugin::create (const TQString & key, TQWidget * parent, const char *name) { if (key == "KReportViewer") return new KReportViewer (parent, name); return 0; } TQString KugarWidgetPlugin::group (const TQString & feature) const { if (feature == "KReportViewer") return "Display"; return TQString::null; } QIconSet KugarWidgetPlugin::iconSet (const TQString &) const { return QIconSet (QPixmap (kugar_pixmap)); } TQString KugarWidgetPlugin::includeFile (const TQString & feature) const { if (feature == "KReportViewer") return "kugar.h"; return TQString::null; } TQString KugarWidgetPlugin::toolTip (const TQString & feature) const { if (feature == "KReportViewer") return "Kugar report viewer widget"; return TQString::null; } TQString KugarWidgetPlugin::whatsThis (const TQString & feature) const { if (feature == "KReportViewer") return "A widget to view xml reports"; return TQString::null; } bool KugarWidgetPlugin::isContainer (const TQString &) const { return FALSE; } TQ_EXPORT_PLUGIN( KugarWidgetPlugin ) kugar_plugin.pro SOURCES += kugar_plugin.cpp HEADERS += kugar_plugin.h DESTDIR = $(TQTDIR)/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++