#include #include #include #include #include #include #include #include #include #include class ToolTipButton : public QPushButton { public: ToolTipButton(QWidget *parent=0) : QPushButton(parent) { } bool event(QEvent *e) { if (e->type() == QEvent::ToolTip) { QTextDocument doc; doc.setHtml(toolTip()); int dtold = 10000 + 40 * qMax(0, toolTip().size() - 100); int dtnew = 10000 + 40 * qMax(0, doc.toPlainText().size() - 100); qDebug() << "showing tooltip; hide in" << dtold * .001 << "s. Should hide in" << dtnew * .001 << "s"; QTimer::singleShot(dtold, [](){qDebug() << "Current Implementation Tooltip closes";}); QTimer::singleShot(dtnew, [](){qDebug() << "Wished Implementation Tooltip closes";}); } return QPushButton::event(e); } }; int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget* w = new QWidget(); QVBoxLayout layout(w); ToolTipButton *b1 = new ToolTipButton(); b1->setToolTip("test"); ToolTipButton *b2 = new ToolTipButton(); QPixmap img(64, 64); img.fill(Qt::white); b2->setIcon(QIcon(img)); QByteArray ba; QBuffer buf; buf.setBuffer(&ba); img.save(&buf, "PNG"); b2->setToolTip(QString("test
").arg(ba.toBase64())); layout.addWidget(b1); layout.addWidget(b2); w->show(); return a.exec(); }