bon ormi qhilighler que vous connaissez déjà, dans le qt 4.5 j'ai trouvé qtScript et tout ce qui va enssemble. En fet c'est un module qui permet de créer des script en Qt mais je pense qu'on peut les réimplenter pour utiliser php, javascript.... Mais je n'en sais pas plus. Vous trouverez un exemple dans QtDoc4.5 > Home > What's new in Qt 4.5 > Qt Script Debugger > click sur "Qt Script Debugger". De plus dans QtDoc4.5 > Home > Examples > Qt Script > click sur "Custom Script Class*" où il y a apparement un exemple pour réimplenter tout ça !! Mais comme c'est pas ma partie j'ai pas bien regarder donc voila peu être je dit de la merde. Enfin une classe comme QTextBrowser au lieu de QTextEdit pourrais vous fournir pas mal de méthodes notamment le fait de clicker sur un lien pour ouvrir une fenêtre ou une QFrame pour l'aide.
Alors il faut tout d'abord savoir sur quoi travail le groupe précédent comme classe mais je pense que la QTextEdit est une bonne base car ils sont obligé soit de la réimplenter soit d'utiliser une classe fille telle que QTextBrowser. Donc il vous suffit d'aller voir dans cette classe ce qu'on vous propose, aprés une courte lecture voici ce que vous pouriez utiliser void QTextEdit::setAlignment ( Qt::Alignment a ) [slot] permettant d'aligner à droite, à gauche, centrer et justifier. Enssuite il va vous falloir regarder où en est le texte à la ligne précédente si c'est la première alors on cal le curseur à la première colonne (pour déplacer le curseur void QTextEdit::moveCursor ( QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor )) sinon on regarde combien d'espace il y avait à la ligne précédente et surtout si à la ligne précédente on a mis un marqueur d'alignement tel que if(){ pour php alors on insert quelques espacements en plus de ceux qui était à la ligne précédente void QTextEdit::insertPlainText ( const QString & text ) [slot]. Voila pour un bon début il faudrais que vous pensez au fait qu'en html les espaces ne se gèrent pas pareil qu'en php par exemple vous pouriez indenter aprés un <\table><\tr><\td> et désindenter aprés un <\td> puis un <\tr> ou autre chose à vous de voir. Enfin pour savoir quand vous devez intéragir sur le QTextEdit je n'ais pas trouver de signal du genre return ou enterPressed donc je pense qu'il vous faut passer par void QTextEdit::textChanged () [signal] et donc de créer un slot du type void monQTextEdit::indentation() [SLOT] !! Voici la définition dans un .h
#include <\QTextEdit>
class monQTextEdit : QTextEdit
{
Q_OBJECT // pour les slots
private slots:
void indentation();
};
Puis de le connecter au signal comme ceci dans le constructeur de monQTextEdit : connect(this, SIGNAL(textChanged()), this, SLOT(indentation())); Par contre à chaque fois que l'utilisateur va presser une touche votre méthode indentation va être appelée il serais donc judicieux de placer un test dès le départ du genre if(derniere_lettre != \n) alor ne rien faire sans quoi tout va être ralenti
Il faut déjà que tu choisisses si tu veux tout rediriger vers le net où si on ajoute l'aide dans un dossier en le récupérant quelques part. Je pense que tu choisira la première donc tout est simple il te suffit d'appeler une exploratuer web (a terme le mien mais pour le moment ff ou ie) et de charger la page correspondante !! Le seul problème va être de récupérer le mot sur lequel se trouve le curseur et à l'action d'une key ou un click droi pui avec le contextMenu lancer le webBrowser. Tu peux aussi voir QVariant QTextEdit::loadResource ( int type, const QUrl & name ) [virtual] qui charge dans le QTextEdit le document à l'url sa peut être une image, une page html ou une css !!! Donc il faut voir pour créer un nouveau TextEdit et y placer le réulstat de la recherche !! Atester voir comment ça marche comme ça tu pourrait lancer une QRegEx sur cette page et aller chercher le contenu exact de la recherche plutôt que la page en entière. Pareil pour le webBrowser je pe te donenr accès sous forme d'un QString à une page html donc enssuite t'aurais accès au code-source de la page t'aurais plus qu'à faire ta recherche le seul pb est que le chargement de mon WebBrowser en entier pour une seule page c'est un peu lourd surtout si tu veux avoir accés à une seul fonction d'une classe php !!! Il fodrais donc que tu te renseigne sur QHttp qui charge une page et te donne ce qu'elle contient sans lancer tout un WebBrowser !! Pour l'affiche des données récupérée une QFrame me semble le meilleur moyen mais c'est à toi de voir !! Pareil pour le fet de sauvegarder les requêtes déjà éffectué afin de ne pas avoir à les refers !! Egalement à réfléchir si la personne n'a pas de connection internet !! Pas de doc du tout !!??!!
Pour commencer il est obligatoire de réimplenter un QMainWindow !! A partir de la tu à plusieurs choix soit tu fais un QLayout et y stock un menu sur le coté gauche et un QTabWidget sur la droit (pour les QTextEdit sur lequel travail autoindentation, autocoloration, autocomplétion, accès à l'aide). Soit tu fé un centralWidget avec QTabWidget et un QToolBar ou QDockWidget pour le menu de gauche. Le menu de gauche doit contenir les action charger, nouveau, enregistrer, imprimer... Avec la navigation dans le projet (un QTreeView à mon avis) Et je pense un QFrame ou QLabel contenant une aide qui pourrait toujours servir pour l'accès à l'aide et les statistique ou afficher n'importe quel message du genre Encodage non reconnu... A toi de voir !! C'est à toi de gérer le plus important : le QTabWidget qui va contenir les QTextEdit !!! Il te faut pouvoir les fermer, en ouvrir des nouvelles, lorsqu'on click sur l'une changer le titre en fonction du titre du document contenant, voir ajouter une icone genre php, javascript suivant ce que c'est !! Pour ajouter un nouveau widget int addTab ( QWidget * page, const QIcon & icon, const QString & label ) le int en retour étant le nouméraux de la page !! le void currentChanged ( int index ) [signal] étant émit lorsqu'on change de page. Pour copier, coller couper tu peux utiliser void copy () void cut () void paste () tu as même dequoi faire annuler avec void redo () et void redo () n'oublie pas de faire un setEnable( canPaste ()) pour faire que le QPushButton coller soit griser si le press papier est vide !! Pareil pour les autres... Tu as la méthode void print ( QPrinter * printer ) const pour imprimer, par contre j'ai rien trouvé pour enregistrer donc cherche^^ !! Enssuite c'est à toi aussi de donner un aspect jolie à la chose pour cela il te suffit de réimpenter void QWidget::paintEvent ( QPaintEvent * event ) [virtual protected] de ton MainWindow pour que cela s'applique à tout le logiciel si personne ne le réimplente !! Voici un exemple :
void MainWindow::paintEvent(QPaintEvent * event)
{
QPainter painter(this);
QLinearGradient gradient(0, 0, this->width(), this->height());
gradient.setColorAt(0.0, Qt::white);
gradient.setColorAt(0.3, Qt::red);
gradient.setColorAt(1.0, Qt::yellow);
painter.setPen(QColor(0, 153, 0, 255));
painter.setBrush(gradient);
painter.drawRect(0, 0, this->width(), this->height());
painter.end();
event->accept();
}
Tu dois également penser à la QStatuBar qui affichera très certainement les messages de certains autres modules donc à toi de voir de la déclarer en public(très laid) ou de fer une méthode public pour pouvoir ajouter du texte !!!