Вот простой пример:
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
?