Se connecter / S'enregistrer

Résolu Problème QT sur stylesheet de widget

Solutions (11)
Tags :
  • Application web
  • Arrière plan
  • Programmation
|
salut à tous,
je rencontre un problème dans la programmation d'un jeu d'échec avec QT.
j'ai un QGridLayout avec dedans des QPushButton
J'ai fixé sur les boutons les images des pièces correspondantes de cette façon :
  1. boutons[0]->setStyleSheet("background-image: url('images/tournoir.png');" );

Pour les cases vides je les ai fait toutes blanches par
  1. boutons[i]->setStyleSheet("background-color: white;" );

Lorsque je clique sur une pièce, ça me propose les possibilités de déplacement en colorant les cases possibles en gris :
  1. QLayoutItem *item=layout->itemAtPosition(7-it->first,it->second);
  2. QWidget *wid=item->widget();
  3. wid->setStyleSheet("background-color : grey;" );


je récupère l'objet à la bonne position, je le modifie en widget car sinon je n'ai pas accès à setStyleSheet et je modifie donc le background-color.
le problème c'est que si dans les cases possibles il y a une pièce adverse(dans le cas où on peut prendre une pièce adverse) la case se colore en gris mais je ne vois donc plus l'image de la pièce!
j'ai essayer au lieu de colorer en gris de faire border-color : red mais non seulement les bords ne sont pas rouges mais en plus l'image de la pièce est effacé et le bouton prend sa couleur par défaut.


je vous demande donc de l'aide pour remédier à cela.

merci d'avance
Contenus similaires
Meilleure solution
partage
, Modérateur |
Ah bah si tu as une QGridLayout, il y a peut être des méthodes pour mettre une couleur de fond à tes cellules, non ?


Edit:
Il y a l'air d'y avoir une méthode setIconSize pour les QPushButton
  • Commenter cette solution |
Score
0
òh
òi
|
magnifique ça marche du tonnerre merci beaucoup à CRicky et OmaR
  • Commenter cette réponse |
Score
0
òh
òi
|
d'accord je vais regarder ça dans la soirée voire si je m'en sort.

merci beaucoup
  • Commenter cette réponse |
Score
0
òh
òi
|
Pour le down casting, en C++ standard, il y a dynamic_cast<nouveau type>(objet), mais certains mauvais compilateurs (Visual C++) nous obligent à cocher une option (RTTI: Run-Time Type Information) du compilateur pour que ce soit utilisable.
Qt a fait un truc similaire (qobject_cast<nouveau type>(objet)) pour les classes implémentant les macros Q_OBJECT (bref touts les classes Qt et classes qui en sont héritées).

http://doc.trolltech.com/4.6/metaobjects.html#qobjectcast
  • Commenter cette réponse |
Score
0
òh
òi
|
ah finalement un problème en découle,
comme je l'ai dit avant je grisé les cases possibles pour un déplacement, mais là je ne veux justement pas toucher mes cases fond blanc ou noir et à la place poser sur la case un icon de couleur gris ou autre. sauf que dans le code suivant je ne récupère pas un QPushButton dans le gridLayout mais un layoutItem que je transforme en QWidget. QWidget n'ayant pas la méthode setIcon je ne peux pas le faire.
  1. QLayoutItem *item=layout->itemAtPosition(7-it->first,it->second);
  2. QWidget *wid=item->widget();
  3. wid->setStyleSheet("background-color : grey;" );


ya moyen de récupérer le vrai objet QPushButton dans un grid layout?
  • Commenter cette réponse |
Score
0
òh
òi
|
d'accord j'avais déjà essayer cette méthode et elle n'était pas reconnue, je vois maintenant pourquoi, je mettais un "e" à la fin de Icon dans setIconSize.
Je me félicite.

Donc là ça a l'air de marcher impeccablement à première vue, je vais faire des déplacements pour vérifier mais ça doit être bon.

je te remercie donc beaucoup OmaR
  • Commenter cette réponse |
Score
0
òh
òi
|
alors la je viens d'essayer de faire
une setStyleSheet sur la case pour mettre le background-color à white et ensuite un setIcon sur la meme case pour mettre l'image. 9a marche sauf que l'image s'affiche en petit dans la case contrairement au styleSheet.
Je me rappelle que c'est d'ailleurs pour cela que j'avais utiliser setStyleSheet.

vous savez comment faire pour que l'icone prenne toute la place?
mes icones font 70x70 pixels et mon bouton pareil 70x70.

sinon je vais essayer un QLabel comme tu dis voire si ça veut marcher.

OmaR ta solution a l'air totalement bonne et j'aurais fais comme ça si j'avais su mais là étant donné que j'ai passé plusieurs jours à mettre en place le gridLayout et tout le bordel et que je n'ai pas énormément de temps surtout, je préfère essayer de l'arranger si il y a une solution.
Mais merci car il se peux que je m'oriente là dessus si il n'y a pas moyen autrement.
  • Commenter cette réponse |
Score
0
òh
òi
|
Essaie de mettre un QLabel avec l'image par dessus (à voir si ça ne pose pas problème avec le layout).

Si tu utilises setIcon() pour mettre l'image, est-ce que si en refaisant un setIcon après le changement de background ça fonctionnerait pas?

Sinon, il serait peut-être plus simple de définir ton propre widget dans lequel tu gères l'affichage et la souris pour tout le tableau.
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Je ne connais pas trop Qt.
Mais ce que j'aurais fait, ça aurait plus été d'avoir une table (QTableView) qui représenterait mon plateau de jeu.
J'aurais défini les couleurs de chaque cellule en noir / blanc pour faire le damier.

Puis, ajouté des QPushButton dans chacune des cellules (ou dans seulement celles qui contiennent une pièce). Les boutons qui n'auraient pas de pièce auraient un background transparent, les autres auraient le dessin de la pièce.
Et tu ne changerais pas la couleur du QPushButton, mais de la cellule de la QTableView.
  • Commenter cette réponse |
Score
0
òh
òi
|
oui c'est une bonne idée mais je vois pas comment je pourrai mettre ça en oeuvre aussi!
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Salut,

Une solution pourrait être d'avoir un control supplémentaire pour représenter ta pièce.
je sais psa si c'est possible ou pas, mais tu mettrais ta pièce dans ton bouton, ainsi ton bouton aurait le bon arrière plan (blanc, noir ou gris), et tu pourrais avoir quand même une image pour ta pièce.
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS