2016-10-26 1 views
1

J'ai un formulaire Qt, où j'ai un bouton et un menu. Pour diverses raisons, je peux désactiver certains éléments, par exemple un bouton ou certaines actions dans le menu.Y at-il un moyen d'afficher l'info-bulle sur QWidget désactivé

Y a-t-il un moyen de montrer une info-bulle ou lorsque la souris survole le bouton ou l'élément de menu désactivé en expliquant pourquoi il est désactivé?

J'utilise Qt 4.8.

Merci!

+0

Impossible de modifier mon poste pour une raison: quand je désactiver le widget, aucune info-bulles apparaissent, car les widgets handicapés ne reçoivent pas les événements de souris – Serge

+1

S'il vous plaît fournir un code. Comme je l'ai mentionné (et également mis à jour mon post), les info-bulles fonctionnent pour les widgets activés et désactivés. Peut-être que vous faites quelque chose avec les événements reçus (voir [ici] (http://stackoverflow.com/a/8470888/1559401)). – rbaleksandar

Répondre

1

Vous pouvez définir l'info-bulle de manière dynamique en fonction de l'état du QWidget ou en basculant simplement les deux en même temps. En désactivant/activant le widget à partir de quelque part, appelez QWidget::setToolTip(...) avec le QString que vous voulez que l'info-bulle s'affiche lorsque vous passez la souris sur le widget donné. Par exemple, si vous avez un slot public appelé toggleButton(bool toggleFlag) qui permet de basculer l'enable-cadre d'un bouton, vous pouvez faire:

void MyWidget::toggleButton(bool toggleFlag) { 
    this->ui->myButton->setEnabled(toggleFlag); 
    this->ui->myButton->setToolTip(toggleFlag ? QString("Enabled wohoo!") : QString("Disabled because I like it")); 
} 

Vous pouvez bien sûr ne changent aussi l'info-bulle en appelant QWidget::isEnabled() et agir sur sa valeur de retour. Puisque vous n'avez pas donné de code, je ne peux que supposer comment vous basculez votre bouton (s) donc c'est tout ce que je peux vous donner pour le moment.


MISE À JOUR: Il a été souligné dans les commentaires que les infobulles ne fonctionnent pas avec des widgets handicapés en raison de ne pas recevoir des événements de souris. Les deux instructions ne sont pas vraies (notez que j'ai utilisé le même message d'infobulle, car je ne voulais pas écrire un tout nouveau projet à partir de rien et en utiliser une existante):

  • Planant un bouton désactivé déclenche l'info-bulle

enter image description here

  • Planant un bouton activé déclenche l'info-bulle

enter image description here

+0

Merci, probablement j'aurais dû le mentionner dans ma question - Je vais le mettre à jour: quand je désactive le widget, aucune infobulle n'apparaît, car les widgets désactivés ne reçoivent pas les événements souris – Serge

+1

Ils le font. Je l'ai testé avant de poster. Publiera quelques images afin que vous puissiez voir. Je me suis également assuré que j'utilise le kit Qt 4.8.6 au lieu du 5.7 que j'utilise actuellement pour le développement. – rbaleksandar

+0

Désolé, vrai - il y avait une faute dans ma logique - maintenant je vois l'info-bulle sur le bouton désactivé. – Serge