Georg Schölly
Georg Schölly

Reputation: 126185

How to disable or shorten the tooltip delay in QTableView?

We are using a QTableView with a custom QAbstractTableModel. Some data is too long to display in the cells directly or we would like to show additional information.

In the model we use the following code:

QVariant MyTableModel::data(const QModelIndex &index, int role) const
{
    if (role == Qt::DisplayRole) {
        return "Short Content";
    }

    if (role == Qt::ToolTipRole) {
        return "Super long content which contains line\nbreaks, tabs\t and more.";
    }

    return QVariant();
}

This works and when hovering the cells the tooltip is displayed. However, this takes a few seconds for the tooltip to appear and sometimes some mouse-wiggling.

Is there a built-in way in Qt 5 to disable the timeout and always display the tooltip?

Upvotes: 3

Views: 2037

Answers (1)

eyllanesc
eyllanesc

Reputation: 244369

As they point out in the Qt forum the delay depends on the style and is returned through SH_ToolTip_WakeUpDelay which is 700 ms by default.

Considering the above, a possible solution is to use the QProxyStyle method override:

class ProxyStyle : public QProxyStyle
{
public:
    using QProxyStyle::QProxyStyle;
    int styleHint(StyleHint hint, const QStyleOption* option = nullptr, const QWidget* widget = nullptr, QStyleHintReturn* returnData = nullptr) const override
    {
        if (hint == QStyle::SH_ToolTip_WakeUpDelay)
            return 0;
        return QProxyStyle::styleHint(hint, option, widget, returnData);
    }
};
tableview->setStyle(new ProxyStyle(tableview->style()));

Upvotes: 11

Related Questions