QT - Как применить QToolTip к QLineEdit - PullRequest
1 голос
/ 10 июня 2010

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

Ответы [ 2 ]

5 голосов
/ 10 июня 2010

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

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?

2 голосов
/ 10 июня 2010

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

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

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

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

...