0

我在自定义委托的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中捕捉单元格焦点?

4

1 回答 1

0

这与https://bugreports.qt.io/browse/QTBUG-5392有关。

Qt Creator 本身的源代码(特别是在小部件中)也使用了一种可能的解决方法,即TaskView通过连接到QItemSelectionModel.

于 2017-07-28T06:57:28.690 回答