Как изменить 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,

Другие вопросы по тегам