IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Enregistrer et lire dans une fenêtre


Sujet :

Qt

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut Enregistrer et lire dans une fenêtre
    Bonjour,

    je suis entrain d'essayer de faire un système qui va me permettre d'enregistrer les 10 derniers messages qui sont apparu et les stocker dans un fichier .ini ensuite je créer une petite fenêtre et je lis le contenu du fichier .ini pour afficher dans la fenêtre.

    Problème :

    - Je reçois les infos depuis une requête donc je voudrais stocker les 10 derniers automatiquement dans mon fichier .ini je stocke en @ByteArray ?

    - Ensuite quand je créer ma fenêtre j'ai un premier problème c'est que je n'arrive pas à afficher du texte...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    void Tool::derniere_alertes()
    {
        QWidget *fenetre = new QWidget;
        fenetre->setWindowTitle("Programme Live : Derniers Messages");
        fenetre->setWindowIcon(QIcon("images/icone.png"));
        fenetre->setMaximumSize(300, 400);
     
        QSettings connexion_write("PROGRAMME_Live.ini", QSettings::IniFormat);
        QString DERNIERS_MESSAGES = connexion_write.value("Alerte/derniers_message", "ErreurMessage").toString();
     
        QLabel *label = new QLabel("Coucou test affichage du texte !!");
     
        fenetre->show();
    }
    ça compile mais ça n'affiche pas de texte...

    Merci !!

  2. #2
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Je suppose que le but c'est que le label se trouve dans le QWidget "fenetre" non ?
    Donc tu dois créer une classe qui derive de QWidget et qui contient un QLabel. Apres tu pourras ecrire dans ce QLabel et le texte s'affichera.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    C'est à dire ?

    Déjà quand je mets pas le QWidget en pointeur il s'ouvre et se ferme directement...

    Et si je ne mets pas le QLabel en pointeur j'ai une erreur de compilation...

    PS : Voilà ce que j'ai fait : (Peux tu me dire si c'est correct stp)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    void Tool::derniere_alertes()
    {
        QWidget *fenetre = new QWidget;
        fenetre->setWindowTitle("Programme Live : Derniers Messages");
        fenetre->setWindowIcon(QIcon("images/icone.png"));
        fenetre->setMaximumSize(300, 400);
     
        QSettings connexion_write("Programme_Live.ini", QSettings::IniFormat);
        QString DERNIERS_MESSAGES = connexion_write.value("Alerte/derniers_message", "ErreurMessage").toString();
     
        QLabel *label = new QLabel(fenetre);
        label->setText("Salut mon amis !!");
        label->move(30, 20);
     
        fenetre->show();
    }

  4. #4
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Citation Envoyé par austin.fla Voir le message
    Déjà quand je mets pas le QWidget en pointeur il s'ouvre et se ferme directement...
    Normal la varaible est locale donc à la fin de la fonction le destructeur est appellé et ta fenetre detruite.

    Citation Envoyé par austin.fla Voir le message
    C'est à dire ?
    Et si je ne mets pas le QLabel en pointeur j'ai une erreur de compilation...
    Je sais pas trop pour l'erreur de compilation mais de toute façon tu dois mal l'utiliser.

    En gros un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class MyWidget : QWidget
    {
     
    private: 
    QLabel* m_Label;
     
    public:
    MyWidget (QWidget *parent, QString text): QWidget(parent)
    {
    m_Label = new QLabel(this);
    m_Label->setText(text);
    }
     
    };
    tu mets ça en varaible membre de ta classe tool:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void Tool::derniere_alertes()
    {
     
     
        QSettings connexion_write("Programme_Live.ini", QSettings::IniFormat);
        QString DERNIERS_MESSAGES = connexion_write.value("Alerte/derniers_message", "ErreurMessage").toString();
     
         fenetre = new MyWidget(this,DERNIERS_MESSAGES );
        fenetre->setWindowTitle("Programme Live : Derniers Messages");
        fenetre->setWindowIcon(QIcon("images/icone.png"));
        fenetre->setMaximumSize(300, 400);
     
        fenetre->show();
    }
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    Donc dans mon cas le code est bon.

    Je voudrais aussi savoir comment centré le QLabel sur mon QWidget ?
    J'ai essayé avec setCentralWidget mais ça na pas fonctionné... ça ne compilé pas...

    Merci

  6. #6
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Désolé j'ai eu un problème lors de l'edition du poste precedent.

    Il ya peut etre des erreur de synthaxe dans mon code mais dans l'esprit il faut que tu fasses comme ça:
    1-Tu crées une classe qui derive de QWidget ici -> MyWidget
    2-Tu mets un QLabel qui est une varaible membre de MyWidget
    3-MyWidget est une variable membre de ta classe Tool
    4-Tu instancie MyWidget dans la classe Tool (faire un new)
    5-Tu peux jouer avec ta fenetre....
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    Parfait merci beaucoup

    Je cherche maintenant le moyen d'enregistrer les infos dans mon .ini je sais enregistrer etc mais le problème c'est que je récup' les données depuis une requête avec QHttp et je voudrais récupérer seulement les 10 derniers messages pour les enregistrer dans mon *.ini !

    Voilà comment je fais pour récupérer les infos XML sur ma page web :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    if(e.tagName() == "news")
            {
                QString news_auteur = e.firstChildElement("news_auteur").text();
                QString news_titre = e.firstChildElement("news_titre").text();
                QString news_lien = e.firstChildElement("news_lien").text();
     
                QMessageBox::information(0, "Programme Live : News", "<p>Une nouvelle news vient d'être postée : " + news_titre + " de " + news_auteur +".<br/><div align=\"center\"><a href='"+ news_lien +"'>Cliquez ici pour la lire !</a></div></p>");
            }
            else if(e.tagName() == "post")
            {
                QString post_auteur = e.firstChildElement("post_auteur").text();
                QString post_titre = e.firstChildElement("post_titre").text();
                QString post_lien = e.firstChildElement("post_lien").text();
     
                QMessageBox::information(0, tr("Programme Live : Post"), "<p>Un nouveau post vient d\'être posté : " + post_titre + " de " + post_auteur + ".<br/><div align=\"center\"><a href='"+ post_lien +"'>Cliquez ici pour le lire !</a></div></p>");
            }
    ...
    Donc je pensé récupérer les 10 derniers messages qui se trouve dans un array vu qu'au début de mon void je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    QDomDocument infos;
        QString errorStr;
        int errorLine;
        int errorColumn;
        QByteArray content = http->readAll();
    Merci !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    Je viens de repenser la chose et voilà ma nouvelle idée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    if(e.tagName() == "news")
    {
       QString news_auteur = e.firstChildElement("news_auteur").text();
       QString news_titre = e.firstChildElement("news_titre").text();
       QString news_lien = e.firstChildElement("news_lien").text();
     
       QString MESSAGE_NEWS = "<p>Une nouvelle news vient d'être postée : " + news_titre + " de " + news_auteur +".<br/><div align=\"center\"><a href='"+ news_lien +"'>Cliquez ici pour la lire !</a></div></p>";
     
       QMessageBox::information(0, tr("PROGRAMME Live : News"), MESSAGE_NEWS);
    }
    if(e.tagName() == "post")
    {
       QString post_auteur = e.firstChildElement("post_auteur").text();
       QString post_titre = e.firstChildElement("post_titre").text();
       QString post_lien = e.firstChildElement("post_lien").text();
     
       QString MESSAGE_POST = "<p>Un nouveau post vient d\'être posté : " + post_titre + " de " + post_auteur + ".<br/><div align=\"center\"><a href='"+ post_lien +"'>Cliquez ici pour le lire !</a></div></p>";
     
       QMessageBox::information(0, tr("PROGRAMME Live : Post"), MESSAGE_POST);
    }
    ...
     
    //Là j'enregistre tout les MESSAGE_NEWS, MESSAGE_POST, etc si il existe dans un array qui pourra contenir max 10 valeurs.
    //Ensuite je vais afficher les 10 messages qui se trouve dans l'array.
    Je voudrais savoir si c'est possible, si c'est une bonne solution et aussi je voudrais savoir pour l'array si je le limite à 10 messages est ce que si je rajoute un nouveau message par exemple il va me dire "Erreur plus de place !!!" Parce que mon but c'est qu'il se gères automatiquement je rempli des que j'arrive à 11 je supprime le 10 message pour le remplacer par le 11 du coup j'aurais toujours 10 messages les plus récents dans l'array.

    Merci !

  9. #9
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    J'ai pas vu dans la doc de QByteArray de limitation au niveau de la taille. Après tes 10 messages sont si long que ça? A mon avis tu peux enregistrer plusieurs centaines de Mo dans un QByteArray et des centaines de Mo de texte c'est quand même énorme.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    D'accord mais le but c'est d'afficher dans une fenêtre les 10 derniers messages sachant que je veux la phrase du message pas juste les valeur extrait de la requête.

    Donc si tu as mieux est plus intéressant à coder je veux bien que tu me propose ton idée, hésite surtout pas !

    Parce que je ne vois pas comment faire pour extraire les 10 dernières valeur entré dans l'array ?

    Merci !

  11. #11
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Je comprend pas trop ton problème mais peut être qu'une QStringList te conviendrait. En gros c'est un tableau dynamique de QString. Avec ça tu gères tes 10 messages du genre maQStringList[0] est mon message 1 et ainsi de suite.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    Mon problème enfaite c'est que j'ai beaucoup de mal à faire ça ^^

    Ok merci je vais essayer ça.

  13. #13
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Citation Envoyé par austin.fla Voir le message
    Mon problème enfaite c'est que j'ai beaucoup de mal à faire ça ^^

    Ok merci je vais essayer ça.
    OK, essaie de faire quelque chose et si cela ne fonctionne pas je pense qu'on pourra t'aider.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    Petite question comme ça...

    J'ai dans des conditions les messages d'alertes que je veux enregistrer.
    Donc je vais mettre le QStringList dans chaqu'une de ces conditions ?

    Enfaite le réelle problème c'est que les messages ce trouve justement dans c'est condition...

    Sachant que j'ai fait de c'est façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(e.tagName() == "news")
    {
    QString nom = valeur recup depuis la requête;
     
    QString Message_News = "Nouvelle news"; // Ce que je veux enregistrer
    QMessageBox::information(0, tr("Photo"), Message_News);
    }
    ...
    Merci désoler mais c'est un peu la galère je mis perd un peu...

  15. #15
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Je ne sais pas trop cela dépend ce que tu veux faire. La QStringList sert juste a structurer et a récupérer tes messages facilement.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    Voilà ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    if(e.tagName() == "news")
            {
                QString news_auteur = e.firstChildElement("news_auteur").text();
                QString news_titre = e.firstChildElement("news_titre").text();
                QString news_lien = e.firstChildElement("news_lien").text();
     
                QString Message_News = "<p>Une nouvelle news vient d'être postée : " + news_titre + " de " + news_auteur +".<br/><div align=\"center\"><a href='"+ news_lien +"'>Cliquez ici pour la lire !</a></div></p>";
                QMessageBox::information(0, tr("Programme Live : News"), Message_News);
                listeMessages << Message_News;
            }
    ...
     
    //Enregistre les 10 derniers messages.
            while(listeMessages.size() > 10)
            listeMessages.removeFirst();
     
            QSettings connexion_write("Programme_Live.ini", QSettings::IniFormat);
            QString DERNIERS_MESSAGES = connexion_write.setValue("Alerte/derniers_messages", listeMessages);
    Mais j'ai ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    tool.cpp: In member function `void Tool::affiche(bool)':
    tool.cpp:466: error: conversion from `void' to non-scalar type `QString' request
    ed

  17. #17
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Tu peux me dire ou se trouve la ligne 466 dans ton code ?
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    voilà la ligne en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QString DERNIERS_MESSAGES = connexion_write.setValue("Alerte/derniers_messages", listeMessages);
    J'ai supprimé le QString DERNIERS_MESSAGES = et ça fonctionne nikel

    Merci beaucoup pour tes réponse rapide et pour ton aide précieuse !

    PS : Je voudrais savoir si il est possible de formater mon texte enlever toutes les balises html qui si trouve parce que du coup quand j'affiche mes message dans la box j'ai le problème des balises html qui s'affiche...

  19. #19
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QString DERNIERS_MESSAGES = connexion_write.setValue("Alerte/derniers_messages", listeMessages);
    Normal la méthode setValue retourne rien (void) et toi tu veux initialiser une QString...

    Pour ton texte HTML oui c'est possible mais a ma connaissance pas facilement. Donc il faut que tu traites toi meme les chaines de caracteres.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    Oui lol c'est bon tout fonctionne par contre je vois pas ce que tu veux dire enfin comment faire pour le html je pensais au expression régulière ?

Discussions similaires

  1. Probleme pour lire un fichier .swf dans une fenêtre
    Par solaimana dans le forum NetBeans
    Réponses: 0
    Dernier message: 27/01/2014, 13h06
  2. [WD12E] Sélection des enregistrements dans une fenêtre RAD
    Par nambours dans le forum WinDev
    Réponses: 4
    Dernier message: 26/04/2010, 09h16
  3. Supprimer la croix dans une fenêtre modale
    Par AnneOlga dans le forum C++Builder
    Réponses: 3
    Dernier message: 15/01/2004, 14h52
  4. Réponses: 3
    Dernier message: 12/11/2003, 00h34
  5. [JDialog] Modification dans une fenêtre
    Par cefabien dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 01/10/2003, 13h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo