2010-06-10 61 views

回答

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 2010-06-10 16:06:52

+1

1:可能是因爲你沒有'#include'這個moc文件。參見http://stackoverflow.com/questions/3001615/qt-moc-with-implementations-inside-of-header-files/ 2:我不太瞭解你的問題。你的意思是一次顯示多個工具提示嗎?這是不可能的。 – Job 2010-06-10 18:57:37

+0

非常感謝您發佈的解決方案。 – Tracy 2011-05-02 02:29:42

2

如果您需要QLineEdit的工具提示,那麼問題是什麼?只需設置:

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

但如果你只需要表現出一些文字一些button按下該按鈕之後,這裏的另一種解決方案:創建插槽,例如on_myBytton_clicked()並將其連接到您的按鈕。在插槽中執行setText()函數,您的文本位於窗體上的QLabelQTextEdit等窗口小部件上。

希望它有幫助。

+1

這不是OP要求的。但你說得對:我認爲使用'QLabel'代替工具提示是個好主意。 – Job 2010-06-10 14:49:42

+0

您的回答與我的問題沒有任何關係。我問如何使用工具提示! – Narek 2010-06-10 15:25:30

+1

因此,您最好在發佈前仔細閱讀如何提出正確的問題...... – mosg 2010-06-10 15:27:57