2013-08-07 8 views
1

Я хочу отобразить всплывающую подсказку для QTreeWidgetItem, которая зависала. Тем не менее, получение всплывающей подсказки не очень быстрый процесс в моем случае, поэтому я не хочу называть setTooltip() для каждого отдельного элемента. Я хочу делать это по требованию, на каком-то событии или сигнале. Какой самый простой способ сделать это?Отображение всплывающей подсказки для QTreeWidgetItem, когда он зависает без вызова setTooltip() для каждого элемента

ответ

1

Лучшее решение я нашел подкласс QTreeWidgetItem, переопределить virtual QVariant data(int column, int role) const; и вернуть подсказку для этого элемента, когда data вызывается для Qt::ToolTipRole.

+0

lol, так, в основном, что я сказал, но не меняя модель/представление. Извините, dunno, как не понял, что это должен быть метод данных в элементах виджетов: S – Trompa

+0

@Trompa: Да, и без модели вообще :) –

+0

В любом случае, вы должны попробовать;). С QStandardItemModel вы будете использовать QStandardItems очень похоже на WidgetItems, и вы получите развязку. – Trompa

0

Я думаю, что вам будет легче достичь желаемого, если вы перейдете к шаблону QTreeView/Model.

QAbstractItemModel играет роль для всплывающих подсказок: Qt :: ToolTipRole

Вы можете создать подкласс Модель переопределять метод

QVariant QAbstractItemModel::data (const QModelIndex & index, int role = Qt::DisplayRole) const [pure virtual 

.

Итак, когда получает Qt :: TooltipRole, он вычисляет/восстанавливается из внутреннего кеша.

+0

Обратите внимание, что, поскольку QTreeWidget наследуется от QTreeView, вы можете назначить свою пользовательскую модель. Но это было бы смешано с яблоками и апельсинами. – Trompa

+0

Я никогда не использовал 'QTreeView', он кажется слишком сложным без уважительной причины (при условии, что мне никогда не приходилось делать что-то, что невозможно с Widget до сих пор). Нет ли способа добиться этого с помощью 'QTreeWidget'? –

+0

Можно ли переопределить 'QtreeWidget :: mouseEvent()', чтобы получить 'QHoverEvent', вычислить, какой элемент мышки окончен, и отобразить всплывающую подсказку? –