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 :

Stylesheet sur class perso


Sujet :

Qt

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Stylesheet sur class perso
    Bonjour a tous,

    Comme le titre le dit je voudrais posser un style sur une classe perso afin de lui mettre un bord sur le mose hover. Ma classe hérite de QSFMLCanvas (fichier pour integrer SFML et Qt, dispo sur le site de SFML) et s'affiche correctement.
    Mini.h
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #ifndef HEADER_MINI
    #define HEADER_MINI
     
    #include <SFML/Graphics.hpp>
    #include <iostream>
    #include <QtGui>
    #include <string>
     
    #include "QSFMLCanvas.h"
    #include "define.h"
     
    class Mini : public QSFMLCanvas {
     
    	public:
    		Mini(QWidget* Parent, const QPoint& Position, const QSize& Size, QString fileName);
     
    		///Open map file and load mini map
    		void openMap();
     
    		///Repaint event 
    		void OnUpdate();
     
    		///Init stuff
    		void OnInit();
     
    	private:
    		/// Load the images
    		sf::Image  m_grass;
    		sf::Image  m_wall;
    		sf::Image  m_box;
    		sf::Image  m_players[4];
     
    		///Get file name of the map
    		QString m_fileName;
     
    		///Sprite for the box
    		sf::Sprite m_boxArray[4];
     
    		///Sprites for the map
    		sf::Sprite m_Sprites[default_map_label_width][default_map_label_height];
    };
     
    #endif
    J'ai essayer (avec m_mainWidget qui est le widget parent de ma classe):
    Dans la classe qui instancie mini:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    m_mainWidget->setStyleSheet("QWidget:hover { border-style: outset; border-width: 2px; border-color: red }");
    m_mainWidget->setStyleSheet("Mini:hover { border-style: outset; border-width: 2px; border-color: red }");
    Dans le constructeur de la classe mini:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    setStyleSheet("QWidget:hover { border-style: outset; border-width: 2px; border-color: red }");
    setStyleSheet("Mini:hover { border-style: outset; border-width: 2px; border-color: red }");
    Cela ne marche pas non plus sans le ":hover".

    Une idée ?

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Il te faut normalement ajouter Q_OBJECT au début de ta classe.
    Je pense que c'est ce qui te manque.

  3. #3
    Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Non, je vien d'essayer de rajouter la mocre et rien de chance.
    Je crois que Q_OBJECT ne sert que quand on redefinit des signaux et des slots pour la classe.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par pierreantoine Voir le message
    Je crois que Q_OBJECT ne sert que quand on redefinit des signaux et des slots pour la classe.
    Ca sert à beaucoup plus de chose
    Bizzare.

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Bonjour pierreantoine

    Si je comprends bien la doc (http://qt.developpez.com/doc/latest/...ylable-widgets), QWidget (et donc QSFMLCanvas qui en hérite : http://www.sfml-dev.org/tutorials/1....hics-qt-fr.php) ne gère que les propriétés de styles pour le fond.

    Pour les autres propriétés, il faut redéfinir la fonction paintEvent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Supports only the background, background-clip and background-origin properties.
    If you subclass from QWidget, you need to provide a paintEvent for your custom QWidget as below:
     
     void CustomWidget::paintEvent(QPaintEvent *)
     {
         QStyleOption opt;
         opt.init(this);
         QPainter p(this);
         style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
     }The above code is a no-operation if there is no stylesheet set.
     
    Warning: Make sure you define the Q_OBJECT macro for your custom widget.
    Le plus simple ici serait peut etre de définir le style dans QApplication pour objets qui doivent utiliser ton style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qApp->setStyleSheet("QPushButton:hover { color: white }");

    Remarque : Q_OBJECT est utilisé ici pour pouvoir utiliser les méta infos (et en particulier le nom de la classe)

    EDIT : Correction : j'ai testé avec QWidget et ça fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    setStyleSheet("QWidget:hover { color: green; border-style: outset; border-width: 5px; border-color: blue }");
     
    QWidget* window = new QWidget;
     
    QPushButton* button1 = new QPushButton("Mon premier boutton");
    QPushButton* button2 = new QPushButton("Mon second boutton");
     
    QVBoxLayout* layout = new QVBoxLayout();
    layout->addWidget(button1);
    layout->addWidget(button2);
     
    window->setLayout(layout);
    setCentralWidget(window);
    Donc le problème est ailleur
    Images attachées Images attachées  

  6. #6
    Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    J'ai essayer beacoup de choses sans résultats...du coup je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setCursor(Qt::PointingHandCursor)
    Et meme pour ca j'ai eu des problemes, appliques a ma classe mini (qui hérite de SFML) ca ne marche pas, j'ai du faire un widget "vide" a qui j'applique le code et ensuite creer mon Mini avec comme parent le widget vide........

    Merci d'avoir essayer en tout cas.

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par pierreantoine Voir le message
    j'ai du faire un widget "vide" a qui j'applique le code et ensuite creer mon Mini avec comme parent le widget vide........
    ha ben oui, je suis con.
    QSFMLCanvas réimplémente le paintevent pour le rendu. Donc c'est normale car il n'exploite pas le style (je suppose).
    Donc ce que tu as fait est ce qu'il faut faire. Dans ces cas, j''utilise un layout pour que la widget parent soit au bonne dimension.
    Sinon, dans 4.5, QFrame permettait plus de chose que QWidget (je sais pas pour 4.6). Mais je sais plus quoi

Discussions similaires

  1. getDefinitionByName() utilisé sur une classe perso ?
    Par Lorenzo77 dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 20/07/2009, 07h24
  2. Tri sur une list(of) avec classe perso
    Par Faladin dans le forum VB.NET
    Réponses: 9
    Dernier message: 04/08/2008, 20h13
  3. Votre avis sur ce module de classe perso
    Par borislotte dans le forum Access
    Réponses: 2
    Dernier message: 06/12/2006, 12h20
  4. [VB.NET] Instanciation objet (sur class perso.)
    Par DaxTaz dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/05/2004, 11h07

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