Clarify link callback captures and their lifetime requirements

This commit is contained in:
evgeny committed 2026-10-28 00:58:59 +01:00
1 parent 25f0e21fb9
commit b7ca74d61d
1 file changed
+3 -2
+3 -2
View File
@@ -40,7 +40,8 @@ public:
bool isRowSelected(const QModelIndex &idx) const; // Включительный диапазон номеров строк; idx ожидается из той же модели.
void setTextSelChars(int start, int end) { m_textSel.startChar = start; m_textSel.endChar = end; } // Обратная связь от delegate.
/* Сохранить hit-test ссылки: fn(index, viewport point) → строка ссылки либо пусто. Пустой fn отключает ссылки.
* Callback вызывается в GUI при hover/release; hover может передать invalid index. Захваченные объекты живут до замены callback. */
* Callback вызывается в GUI при hover/release; hover может передать invalid index.
* Вызывающий обеспечивает lifetime захваченных объектов на время их использования callback. */
void setLinkHitTest(std::function<QString(const QModelIndex&, const QPoint&)> fn) { m_linkHitTest = std::move(fn); }
signals:
@@ -78,6 +79,6 @@ private:
QPoint m_pressPos; // Координата события press для порога drag и проверки click.
bool m_selecting = false; // Идёт drag собственного выделения, не состояние стандартной модели выбора.
bool m_historicalWindow = false; // Выбран исторический снимок, владелец должен обработать latestRequested.
std::function<QString(const QModelIndex&, const QPoint&)> m_linkHitTest; // Собственная копия callback, без владения захваченными QObject.
std::function<QString(const QModelIndex&, const QPoint&)> m_linkHitTest; // Собственная копия callback и его захваченных значений.
QPushButton *m_scrollDownBtn = nullptr; // QObject-child вида: latestRequested и затем локальная прокрутка вниз.
};