QT - 如何在QLineEdit上应用QToolTip

时间:2010-06-10 13:38:12

标签: c++ qt tooltip

在对话框中,我有一个QLineEdit和一个按钮。我想在按下按钮时为QLineEdit(在其中或在其下)启用工具提示。请给我一个代码段。

2 个答案:

答案 0 :(得分:5)

这是一个简单的例子:

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

答案 1 :(得分:2)

如果您需要QLineEdit的工具提示,那么问题是什么?只需设置:

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

但是,如果您只需要在按下button之后显示一些文字,那么另一个解决方案是:创建一个插槽,例如on_myBytton_clicked()并将其连接到您的按钮。在插槽中,使用位于表单上的QLabelQTextEdit等小部件上的文字执行 setText()功能。

希望有所帮助。