2010-06-10 4 views

Répondre

4

Voici un exemple simple:

class MyWidget : public QWidget 
{ 
     Q_OBJECT 

    public: 

     MyWidget(QWidget* parent = 0) : QWidget(parent) 
     { 
      QVBoxLayout* layout = new QVBoxLayout(this); 
      edit = new QLineEdit(this); 
      layout->addWidget(edit); 
      showButton = new QPushButton("Show tool tip", this); 
      layout->addWidget(showButton); 
      hideButton = new QPushButton("Hide tool tip", this); 
      layout->addWidget(hideButton); 

      connect(showButton, SIGNAL(clicked(bool)), this, SLOT(showToolTip())); 
      connect(hideButton, SIGNAL(clicked(bool)), this, SLOT(hideToolTip())); 
     } 

    public slots: 

     void showToolTip() 
     { 
      QToolTip::showText(edit->mapToGlobal(QPoint()), "A tool tip"); 
     } 

     void hideToolTip() 
     { 
      QToolTip::hideText(); 
     } 

    private: 

     QLineEdit* edit; 
     QPushButton* showButton; 
     QPushButton* hideButton; 
}; 

Comme vous pouvez le voir, il n'y a pas moyen facile de permettre que la pointe de l'outil de certains widgets. Vous devez fournir des coordonnées globales au QToolTip::showText.

Une autre façon de procéder est de créer un QHelpEvent et de publier cet événement en utilisant QCoreApplication::postEvent. De cette façon, vous pouvez spécifier le texte à afficher dans votre widget en utilisant QWidget::setToolTip. Cependant, vous devez toujours fournir des coordonnées globales. Je suis vraiment intéressé par la raison pour laquelle vous voulez faire cela puisque les conseils d'outil sont destinés à être affichés uniquement lorsque vous passez votre souris ou lorsque vous demandez l'information "Qu'est-ce que c'est". Il ressemble à un mauvais design pour l'utiliser pour autre chose. Si vous voulez donner un message à l'utilisateur, pourquoi n'utilisez-vous pas QMessageBox?

+0

Merci. Je veux utiliser ceci afin de dire à l'utilisateur que le QLineEdit va être rempli avec l'état de CapsLock ON (pour le champ de mot de passe). Il y a deux questions: 1) Pourquoi si je ne sépare pas cette définition de classe dans les fichiers .cpp et .h cela donne une erreur de lien (un problème de vtable)? Et comment puis-je avoir plus d'un QToolTips invoqué séparément dans une classe? Je vois que vous avez utilisé des fonctions statiques que vous avez utilisées. – Narek

+1

1: Probablement parce que vous n'avez pas # inclus le fichier moc. Voir http://stackoverflow.com/questions/3001615/qt-moc-with-implementations-inside-of-header-files/ 2: Je ne comprends pas vraiment votre question. Voulez-vous dire montrer plus d'une info-bulle à la fois? C'est impossible. – Job

+0

merci pour la solution que vous avez postée.il est super! – Tracy

2

Si vous avez besoin d'info-bulle pour QLineEdit, quel est le problème? Il suffit de définir:

myLineEdit->setToolTip("Here is my tool tip"); 

Mais si vous avez juste besoin de montrer un texte après un certain button a été pressé, voici l'autre solution: créer une fente, par exemple on_myBytton_clicked() et connectez-vous à votre bouton. Dans la fente faire le setText() fonction avec votre texte sur , QTextEdit et etc widgets situés sur votre formulaire.

J'espère que cela vous aidera.

+1

Ce n'est pas ce que l'OP a demandé. Mais vous avez raison: je pense aussi que c'est une meilleure idée d'utiliser un 'QLabel' au lieu d'une info-bulle. – Job

+0

Votre réponse n'a aucun lien avec ma question. Je demande comment utiliser toolTip !!! – Narek

+1

Donc, vous feriez mieux de lire sur la façon de poser la bonne question, avant de les poster ... – mosg

Questions connexes