Как изменить sizeHint делегата на фокус ячейки TableView?
У меня есть некоторые проблемы с sizeHint пользовательского делегата: я хочу "развернуть" ячейку (строку с этой ячейкой) на ее фокус; в противном случае вернуть размер по умолчанию; QTableVew подключен для изменения размера строк при нажатии мыши:
connect(m_scheduleView, &QTableView::pressed, m_scheduleView, &QTableView::resizeRowsToContents);
QSize DBScheduleItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if (option.state & QStyle::State_HasFocus) {
... // this block never executes;
return // some calculated size;
}
return QSize(width, height); // default size;
}
Код в условном блоке никогда не выполнялся, но такое же условие в делегате paint() выполняется правильно:
void DBScheduleItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if (option.state & QStyle::State_HasFocus)
painter->fillRect(...);
}
Итак, как поймать клеточный фокус в sizeHint?
1 ответ
Это связано с https://bugreports.qt.io/browse/QTBUG-5392.
Возможный обходной путь, который также используется в исходном коде самого Qt Creator (особенно в TaskView
виджет), чтобы отслеживать текущий / выбранный элемент (ы) самостоятельно, подключившись к QItemSelectionModel
,