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

Discussion :

Disparition du fond avec Q_OBJECT

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2009
    Messages : 122
    Par défaut Disparition du fond avec Q_OBJECT
    J'ai un menu avec un fond et trois boutons. Quand j'ajoute Q_OBJECT à ma classe afin de faire des slots perso mon fond ne s'affiche plus. Si je retire Q_OBJECT mon fond reste.

    J'ai essayer de placer à différent endroit le chargement de mon fond mais ça ne change rien.

    ma classe :
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class MaFenetre : public QWidget
    {
        Q_OBJECT
    public slots:
        void DeleteButton();
    private:
        QPushButton * classique, * francais, * quitter;
    public:
        MaFenetre();
        ~MaFenetre();
        //void DeleteButton();
     
    };

    Mon constructeur :
    Code c++ : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
     
    MaFenetre::MaFenetre() : QWidget()
    {
     
        setFixedSize(500, 500);
        this->setStyleSheet("background-image:url(solitaire-fond.png);");
     
        //Création du bouton pour le plateau classique
        classique = new QPushButton("      classique", this);
     
            classique->setFont(QFont("Blackadder ITC", 23, QFont::Bold));
            classique->setCursor(Qt::PointingHandCursor);
            classique->setIcon(QIcon("smiley.png"));
            classique->resize(164,45);
            classique->move(200, 100);
     
        //Création du bouton pour le plateau français
        francais = new QPushButton("      francais", this);
     
        francais->setFont(QFont("Blackadder ITC", 23, QFont::Bold));
            francais->setCursor(Qt::PointingHandCursor);
            francais->setIcon(QIcon("smiley.png"));
            francais->resize(164,45);
            francais->move(200, 200);
     
        //Création du bouton pour quitter
        quitter = new QPushButton("      &quitter", this);
     
            quitter->setFont(QFont("Blackadder ITC", 23, QFont::Bold));
            quitter->setCursor(Qt::PointingHandCursor);
            quitter->setIcon(QIcon("smiley.png"));
            quitter->resize(164,45);
            quitter->move(200, 300);
     
        //Ajout des fond aux boutons
        classique->setStyleSheet("QWidget{background-image:url(boutton_1.png);}");
        francais->setStyleSheet("QWidget{background-image:url(boutton_2.png);}");
        quitter->setStyleSheet("QWidget{background-image:url(boutton_quit.png);}");
     
        //Création de la connection du bouton quitter avec la fonction système quitter
        QObject::connect(quitter, SIGNAL(clicked()), qApp, SLOT(quit()));
        QObject::connect(classique, SIGNAL(clicked()), this, SLOT(DeleteButton()));
     
    }

    Pour info la fonction appelé sur le clic n'est là que pour tester que le slot fonctionne ^^.

    Donc si quelqu'un sait pourquoi mon fond disparait comme par magie je suis preneur.

  2. #2
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    Regarde la doc, elle peut t'aider : http://qt.developpez.com/doc/latest/...qwidget-widget

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2009
    Messages : 122
    Par défaut
    Merci mais c'est de là que vient ma création de fond .

    Non ce que je me demande c'est pourquoi l'ajout de la macro Q_OBJECT, rend inefficace mon style pour ma fenêtre. Surtout que ça fonctionne toujours pour les boutons .

  4. #4
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    Citation Envoyé par Shr3ck Voir le message
    Merci mais c'est de là que vient ma création de fond .

    Non ce que je me demande c'est pourquoi l'ajout de la macro Q_OBJECT, rend inefficace mon style pour ma fenêtre. Surtout que ça fonctionne toujours pour les boutons .
    Hum tu es sur ?

    Citation Envoyé par doc
    Supports only the background, background-clip and background-origin properties.
    Hors toi tu utilises :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    background-image:url(solitaire-fond.png);
    Et je ne vois aucune réimplémentation de paintEvent(QPaintEvent *) dans ton code.

    Après je peux me tromper, je n'ai fait que lire la doc.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2009
    Messages : 122
    Par défaut
    Supports only the background, background-clip and background-origin properties.
    En effet met quand on regarde dans la doc à background on a :

    Example:

    QLabel {
    background-image: url(dense6pattern.png);
    background-repeat: repeat-xy;
    }
    soit ce que j'utilise. En plus le problème ne doit pas venir de " background-image: url(image.png);" car si je retire la macro mon fond s'affiche.

    Par contre :
    Citation Envoyé par johnlamericain
    Et je ne vois aucune réimplémentation de paintEvent(QPaintEvent *) dans ton code.
    Il se peut en effet qu'il me manque cela. Par contre je ne sais pas du tout pourquoi il faut faire une réimplémentation et comment faire cela.

  6. #6
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    Citation Envoyé par Shr3ck Voir le message
    Il se peut en effet qu'il me manque cela. Par contre je ne sais pas du tout pourquoi il faut faire une réimplémentation et comment faire cela.
    Rajoute dans ton code .cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     void MaFenetre::paintEvent(QPaintEvent *)
     {
         QStyleOption opt;
         opt.init(this);
         QPainter p(this);
         style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
     }
    N'oublie pas la déclaration dans le .h ! Et ça devrait marcher

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2009
    Messages : 122
    Par défaut
    merci beaucoup ça fonctionne à merveille !!

    Je passe en résolu.

    Par contre je ne vois pas du tout comment cela fonctionne. Comment cette méthode peut fonctionner alors qu'elle n'est appelée par aucune autre ??

    Serait-il possible d'avoir une explication ou un lien pour comprendre le mécanisme ?

    Edit : je viens de voir que la fonction était dans la doc que tu m'as filé... par contre elle n'a pas l'aire d'être expliquée.

  8. #8
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Si tu veux de la lecture : http://qt.developpez.com/doc/latest/...ndfilters.html
    En résumé, il y a des fonctions qui semblent n'être appelées nul part, mais sont en fait exécutées par Qt "en interne" de manière évènementielle, donc tu ne les utilises pas (à priori) dans tes procédures.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de disparition de "bodies" avec la synchro
    Par VinmaDev dans le forum BOUML
    Réponses: 4
    Dernier message: 23/05/2007, 20h40
  2. [CSS] image de fond avec barre de navigation
    Par speedylol dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 29/10/2006, 14h46
  3. Décalage de l'image de fond avec firefox
    Par raphio000 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 03/08/2006, 01h08
  4. [CSS] Disparition de div avec IE
    Par galette dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 11/05/2006, 14h05
  5. Réponses: 1
    Dernier message: 06/12/2005, 23h23

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