2010-06-10 5 views
1

В диалоговом окне у меня есть QLineEdit и кнопка. Я хочу включить подсказку для QLineEdit (в ней или под ней), когда я нажимаю кнопку. Пожалуйста, дайте мне фрагмент кода.QT - Как применить QToolTip на QLineEdit

ответ

4

Вот простой пример:

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; 
}; 

Как вы можете видеть, нет простого способа просто включить подсказку некоторого виджета. Вы должны предоставить глобальные координаты QToolTip::showText.

Другой способ сделать это - создать QHelpEvent самостоятельно и опубликовать это событие, используя QCoreApplication::postEvent. Таким образом, вы можете указать текст, который будет отображаться в вашем виджете, используя QWidget::setToolTip. Тем не менее, вы все равно должны предоставлять глобальные координаты.

Мне действительно интересно, почему вы хотите это сделать, поскольку подсказки инструментов предназначены для отображения только тогда, когда вы наводите указатель мыши на или, когда вы запрашиваете информацию «Что это». Это похоже на плохой дизайн, чтобы использовать его для чего-то другого. Если вы хотите дать сообщение пользователю, почему бы вам не использовать QMessageBox?

+0

Спасибо. Я хочу использовать это, чтобы сообщить пользователю, что QLineEdit будет заполнен состоянием CapsLock ON (для поля пароля). Есть два вопроса: 1) Почему, если я не разделяю это определение класса в файлах .cpp и .h, он дает ошибку компоновщика (некоторые проблемы с vtable)? И как у меня может быть более одного QToolTips, отдельно вызванных в одном классе? Я вижу, вы использовали статические функции, которые вы использовали. – Narek

+1

1: Возможно, потому, что вы не '# включаете 'файл moc. См. Http://stackoverflow.com/questions/3001615/qt-moc-with-implementations-inside-of-header-files/ 2: Я действительно не понимаю ваш вопрос. Вы имеете в виду показывать сразу несколько подсказок? Это невозможно. – Job

+0

Благодарим вас за решение, которое вы разместили. Это здорово! – Tracy

2

Если вам нужна подсказка для QLineEdit, то в чем проблема? Просто установите:

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

Но если вам нужно только, чтобы показать текст после некоторых button была нажата, здесь другое решение: создать слот, например on_myBytton_clicked() и подключить его к кнопке. В слоте делайте setText() со своим текстом на QLabel, QTextEdit и т. Д. Виджеты, расположенные на вашей форме.

Надеюсь, что это поможет.

+1

Это не то, что задал ОП. Но вы правы: я также думаю, что лучше использовать «QLabel» вместо подсказки. – Job

+0

Ваш ответ не имеет никакого отношения к моему вопросу. Я спрашиваю, как использовать toolTip !!! – Narek

+1

Итак, вам лучше прочитать о том, как задать правильный вопрос, прежде чем публиковать их ... – mosg

Смежные вопросы