Es crea la pàgina amb «= Mètodes: = === void print(QPrinter &printer, const QString &htmlText, const QString &bkend_process_name); === Envia a inprimir un fitxer amb capçalera i peu de pagi...».
 
Joan (discussió | contribucions)
Cap resum de modificació
 
(6 revisions intermèdies per un altre usuari que no es mostra)
Línia 1: Línia 1:
[[Category:SAPO]]
[[Category:Devel]]
Aquesta llibreria va ser creada per assistir en el procés de creació de frontends per a programes pensats per a terminal.
Per si mateixa no mostra res per pantalla, això ho deixa al gust del programador que la utilitzi.
= Classes: =
Dues classes:
*cadtqtgui: És la única classe amb constructor públic, i per tant la única que podrem crear.
*preferences: S'encarrega de mostrar un dialeg per tal de canviar el idioma o color del programa. El constructor és privat i la única classe que la pot cridar és la cadtqtgui.
= Mètodes: =
= Mètodes: =
Aquí s'expliquen detalladament tots els mètodes que incorpora la llibreria en la seva versió 1.0.1.
Tot i que ja està explicat al mètode corresponent, aprofito per recordar que el mètode "confBrowser" és obligatori si volem utilitzar algun mètode que utilitzi un QTextEdit.
== Classe cadtqtgui ==
=== cadtqtgui(); ===
El constructor accepta com a parametres:
*userPath
*userPath, parent
*userPath, parent, nom
*parent
*parent, nom
ON:
*userPath és el path del usuari
*parent és el widget principal. Aquest s'ha de posar si volem fer servir el mètode execPref();
*nom és el nom del programa. Caldra posar-lo si volem que el programa guardi una aparença independent de la resta de programes que utilitzen la llibreria.
=== void execPref(); ===
Mostra el dialeg de preferencies. Indispensable construir la classe amb un parent.


=== void print(QPrinter &printer, const QString &htmlText, const QString &bkend_process_name); ===
=== void print(QPrinter &printer, const QString &htmlText, const QString &bkend_process_name); ===


Envia a inprimir un fitxer amb capçalera i peu de pagina ja predeterminats
Envia a imprimir un fitxer amb capçalera i peu de pàgina ja predeterminats


*Se li pasa un QPrinter previament configurat amb un QPrint Dialog.
*Se li pasa un QPrinter previament configurat amb un QPrint Dialog.
*Se li pasa el texte a imprimir en format html.
*Se li pasa el text a imprimir en format html.
*Se li pasa el nom del programa que figurara a la capçalera.
*Se li pasa el nom del programa que figurarà a la capçalera.




Línia 13: Línia 43:
=== QString preTestFile(const QString &processName, const int &returnPath = 0); ===
=== QString preTestFile(const QString &processName, const int &returnPath = 0); ===


Determina si un programa esta o no al PATH retornant l'error si no el troba (ja formatat per posar en un QMessageBox). Opcionalment, si troba el path, el retorna amb format #:path
Determina si un programa està o no al $PATH retornant l'error si no el troba (ja formatat per posar en un QMessageBox). Opcionalment, si troba el path, el retorna amb format #:<path>


*Se li pasa el nom del programa aque volem executar (sense el path)
*Se li pasa el nom del programa que volem executar (sense el path)
*Si volem posem com a segon parametre un 1 pq ens retorni "#:path" en comptes de "" (si tot va be)
*Si volem posem com a segon parametre un 1 perquè en el cas de testejar el fitxer amb resultat satisfactori ens retorni "#:<path>" en comptes de un QString vuit.




Línia 22: Línia 52:
=== void about(QStringList &out, const QStringList &progs, const QString &ident_process_exe, const QString &frend_process_name, const QString &bkend_process_name); ===
=== void about(QStringList &out, const QStringList &progs, const QString &ident_process_exe, const QString &frend_process_name, const QString &bkend_process_name); ===


Ens retorna el text html necessari per introduir a un QMessageBox::about. Per que la imatge surti correctament s'ha de posar al main.cpp, just despres de la declaracio de QApplication, el seguent: Q_INIT_RESOURCE(libresource);
Ens retorna el text html necessari per introduir a un QMessageBox::about. Perquè la imatge surti correctament, s'ha de posar al main.cpp, just despres de la declaracio de QApplication, el seguent:
Q_INIT_RESOURCE(libresource);


*Se li pasa un QStringList a on es desara el resultat, aquest estara format per dos QStrings, el titol del about i el cos del missatge.
*Se li pasa un QStringList on es desarà el resultat, aquest estarà format per dos QStrings, el títol de la finestra "about" i el cos del missatge.
*Se li pasa un QStringlist amb el PATH COMPLERT del frontend i del/s backend/s. ex QStringList() << frend << bkend1 << bkend2 << bkend3;
*Se li pasa un QStringlist amb el PATH COMPLERT del frontend i del/s backend/s. ex: QStringList() << frend << bkend1 << bkend2 << bkend3;
*Se li pasa el executable del programa ident (ident)
*Se li pasa el executable del programa ident (ident)
*Se li pasa el nom del programa bkend: ex: "Divide"
*Se li pasa el nom del programa bkend: ex: "Divide"
Línia 34: Línia 65:
=== void std2browser(const QByteArray &read, QTextEdit *browser, const QString &color); ===
=== void std2browser(const QByteArray &read, QTextEdit *browser, const QString &color); ===


Ens desa un trosset del l'stderr o l'stdout (en format QByteArray) al QtextEdit que volguem tot indicant-li el color. Molt util si s'utilitza com a metode que s'executi cada com que el buffer de l'stdout/err contingui informacio.
Ens desa un trosset del l'stderr o l'stdout (en format QByteArray) al QtextEdit que volguem tot indicant-li el color.
Molt útil si s'utilitza com a mètode que s'executi cada cop que el buffer de l'stdout/err contingui informació (el qual retorna les dades en format QByteArray).


*Se li pasa l'stderr o stdout
*Se li pasa l'stderr o stdout
Línia 44: Línia 76:
=== void confBrowser(QTextEdit *browser, const int &colSize = 0); ===
=== void confBrowser(QTextEdit *browser, const int &colSize = 0); ===


Molt util per deixar configurat el QTextEdit per a la seva utilitzacio en aquesta llibreria.
Necessari per deixar configurat el QTextEdit per a la seva utilització en aquesta llibreria.


*Se li pasa el QTextEdit
*Se li pasa el QTextEdit
*Opcionalment li pots pasar el maxim de columnes de caracters que vols que utilitzi (si no se li pasa res, la linia s'adapta a l'ample del QTextEdit)
*Opcionalment li pots pasar el màxim de columnes de caracters que vols que utilitzi (si no se li pasa res, la linia s'adapta a l'ample del QTextEdit)




Línia 53: Línia 85:
=== int getBrowserCols(QTextEdit *browser); ===
=== int getBrowserCols(QTextEdit *browser); ===


Ens dira el maxim de columnes de caracters que permet el browser amb el tamany actual.
Ens dirà el màxim de columnes de caracters que permet el browser amb el tamany actual.


*Se li pasa el QTextEdit
*Se li pasa el QTextEdit
Línia 61: Línia 93:
=== QString getUserPath(); ===
=== QString getUserPath(); ===


Ens pasara /opt/sapo/users/USER/ on USER es el nom d'usuari logat
Ens pasarà /opt/sapo/users/USER/ on USER es el nom d'usuari logat




Línia 67: Línia 99:
=== QString processErr2string(const QProcess::ProcessError &err); ===
=== QString processErr2string(const QProcess::ProcessError &err); ===


Ens retorna un Human readable error
Ens retorna un Human readable error a partir del codi d'error d'un QProcess


*Li pasem el tipus d'error.
*Li pasem el tipus d'error.
== Classe preferences ==
=== void langChanged(const QString &l); ===
Senyal que ens avisa de que s'ha seleccionat un idioma
=== void colorChanged(const QColor &c); ===
Senyal que ens avisa de que s'ha seleccionat un color
=== void pbColorAction(); ===
Acció que s'activa en clicar el boto de seleccio de color
=== void pbColorDefaultAction(); ===
Acció que s'activa en clicar el boto de seleccio de color per defecte
=== void cbLanguageAction(int index); ===
Acció que s'activa en clicar el boto de idioma
=== preferences(); ===
Constructor per defecte, nomes implementat per tal de fer-lo privat
=== explicit preferences(const QColor &clr, const QString &lng, QWidget *parent = 0); ===
Constructor real de la classe
= Traducció =
Per traduir, primer de tot cal encerclar tots els QStrings que volem traduir amb tr(<QString>).
Després, dins el directori ...QT/bin trovarem una eina que es diu lupdate. Aquest ens crea un xml amb els strings a traduir
*Farem: lupdate arxiu.pro -ts nom_es_CA.ts on:
**"arxiu.pro" es el projecte de QT
**"nom" és el prefix que posarem a tots els arxius de traducció (a la nostra elecció)
**"es" és el codi de pais
**"CA" és el codi de llengua (no obligatori)
***exemples: pepito_es_CA -> català; pepito_es -> castella; pepito_fr -> frances
**"ts" és la extensió
Quan ja hem creat els arxius.ts a ...QT/bin trobarem el programa linguist
*Farem linguist *.ts i ens assistirà per traduir els QStrings que hem marcat.
Al makefile hem d'afegir aquests *.ts i ens crearà binaris *.qm que desarà a la carpeta src/resources.
*TSOBJS = pepito_es_CA.ts pepito_es.ts pepito_fr.ts
Finalment perque el programa quedi traduit fem:
QString lang = QProcess::systemEnvironment().filter(QRegExp("^LANG=")).first();
lang = lang.replace(QRegExp("^.*="), "");
QTranslator translator;
translator.load("path/pepito_" + lang);
a.installTranslator(&translator);
on "a" es la nostra QApplication
= Crear un fitxer de projecte QT .pro =
Anem al directori src del nostre programa:
executem ...QT/bin/qmake -project
on: ...QT es el directori on tenim instalat el qt

Revisió de 12:40, 7 gen 2015

Aquesta llibreria va ser creada per assistir en el procés de creació de frontends per a programes pensats per a terminal. Per si mateixa no mostra res per pantalla, això ho deixa al gust del programador que la utilitzi.

Classes:

Dues classes:

  • cadtqtgui: És la única classe amb constructor públic, i per tant la única que podrem crear.
  • preferences: S'encarrega de mostrar un dialeg per tal de canviar el idioma o color del programa. El constructor és privat i la única classe que la pot cridar és la cadtqtgui.

Mètodes:

Aquí s'expliquen detalladament tots els mètodes que incorpora la llibreria en la seva versió 1.0.1. Tot i que ja està explicat al mètode corresponent, aprofito per recordar que el mètode "confBrowser" és obligatori si volem utilitzar algun mètode que utilitzi un QTextEdit.

Classe cadtqtgui

cadtqtgui();

El constructor accepta com a parametres:

  • userPath
  • userPath, parent
  • userPath, parent, nom
  • parent
  • parent, nom

ON:

  • userPath és el path del usuari
  • parent és el widget principal. Aquest s'ha de posar si volem fer servir el mètode execPref();
  • nom és el nom del programa. Caldra posar-lo si volem que el programa guardi una aparença independent de la resta de programes que utilitzen la llibreria.

void execPref();

Mostra el dialeg de preferencies. Indispensable construir la classe amb un parent.

void print(QPrinter &printer, const QString &htmlText, const QString &bkend_process_name);

Envia a imprimir un fitxer amb capçalera i peu de pàgina ja predeterminats

  • Se li pasa un QPrinter previament configurat amb un QPrint Dialog.
  • Se li pasa el text a imprimir en format html.
  • Se li pasa el nom del programa que figurarà a la capçalera.


QString preTestFile(const QString &processName, const int &returnPath = 0);

Determina si un programa està o no al $PATH retornant l'error si no el troba (ja formatat per posar en un QMessageBox). Opcionalment, si troba el path, el retorna amb format #:<path>

  • Se li pasa el nom del programa que volem executar (sense el path)
  • Si volem posem com a segon parametre un 1 perquè en el cas de testejar el fitxer amb resultat satisfactori ens retorni "#:<path>" en comptes de un QString vuit.


void about(QStringList &out, const QStringList &progs, const QString &ident_process_exe, const QString &frend_process_name, const QString &bkend_process_name);

Ens retorna el text html necessari per introduir a un QMessageBox::about. Perquè la imatge surti correctament, s'ha de posar al main.cpp, just despres de la declaracio de QApplication, el seguent:

Q_INIT_RESOURCE(libresource);
  • Se li pasa un QStringList on es desarà el resultat, aquest estarà format per dos QStrings, el títol de la finestra "about" i el cos del missatge.
  • Se li pasa un QStringlist amb el PATH COMPLERT del frontend i del/s backend/s. ex: QStringList() << frend << bkend1 << bkend2 << bkend3;
  • Se li pasa el executable del programa ident (ident)
  • Se li pasa el nom del programa bkend: ex: "Divide"
  • Se li pasa el nom del programa frend: ex: "Divide Qt GUI"


void std2browser(const QByteArray &read, QTextEdit *browser, const QString &color);

Ens desa un trosset del l'stderr o l'stdout (en format QByteArray) al QtextEdit que volguem tot indicant-li el color. Molt útil si s'utilitza com a mètode que s'executi cada cop que el buffer de l'stdout/err contingui informació (el qual retorna les dades en format QByteArray).

  • Se li pasa l'stderr o stdout
  • Se li pasa el QTextEdit
  • Se li pasa el color de la lletra


void confBrowser(QTextEdit *browser, const int &colSize = 0);

Necessari per deixar configurat el QTextEdit per a la seva utilització en aquesta llibreria.

  • Se li pasa el QTextEdit
  • Opcionalment li pots pasar el màxim de columnes de caracters que vols que utilitzi (si no se li pasa res, la linia s'adapta a l'ample del QTextEdit)


int getBrowserCols(QTextEdit *browser);

Ens dirà el màxim de columnes de caracters que permet el browser amb el tamany actual.

  • Se li pasa el QTextEdit


QString getUserPath();

Ens pasarà /opt/sapo/users/USER/ on USER es el nom d'usuari logat


QString processErr2string(const QProcess::ProcessError &err);

Ens retorna un Human readable error a partir del codi d'error d'un QProcess

  • Li pasem el tipus d'error.

Classe preferences

void langChanged(const QString &l);

Senyal que ens avisa de que s'ha seleccionat un idioma

void colorChanged(const QColor &c);

Senyal que ens avisa de que s'ha seleccionat un color

void pbColorAction();

Acció que s'activa en clicar el boto de seleccio de color

void pbColorDefaultAction();

Acció que s'activa en clicar el boto de seleccio de color per defecte

void cbLanguageAction(int index);

Acció que s'activa en clicar el boto de idioma

preferences();

Constructor per defecte, nomes implementat per tal de fer-lo privat

explicit preferences(const QColor &clr, const QString &lng, QWidget *parent = 0);

Constructor real de la classe

Traducció

Per traduir, primer de tot cal encerclar tots els QStrings que volem traduir amb tr(<QString>).

Després, dins el directori ...QT/bin trovarem una eina que es diu lupdate. Aquest ens crea un xml amb els strings a traduir

  • Farem: lupdate arxiu.pro -ts nom_es_CA.ts on:
    • "arxiu.pro" es el projecte de QT
    • "nom" és el prefix que posarem a tots els arxius de traducció (a la nostra elecció)
    • "es" és el codi de pais
    • "CA" és el codi de llengua (no obligatori)
      • exemples: pepito_es_CA -> català; pepito_es -> castella; pepito_fr -> frances
    • "ts" és la extensió

Quan ja hem creat els arxius.ts a ...QT/bin trobarem el programa linguist

  • Farem linguist *.ts i ens assistirà per traduir els QStrings que hem marcat.

Al makefile hem d'afegir aquests *.ts i ens crearà binaris *.qm que desarà a la carpeta src/resources.

  • TSOBJS = pepito_es_CA.ts pepito_es.ts pepito_fr.ts

Finalment perque el programa quedi traduit fem:

QString lang = QProcess::systemEnvironment().filter(QRegExp("^LANG=")).first();
lang = lang.replace(QRegExp("^.*="), "");
QTranslator translator;
translator.load("path/pepito_" + lang);
a.installTranslator(&translator);

on "a" es la nostra QApplication

Crear un fitxer de projecte QT .pro

Anem al directori src del nostre programa: executem ...QT/bin/qmake -project

on: ...QT es el directori on tenim instalat el qt