【问题标题】:How to change delegate’s sizeHint on TableView’s cell focus?如何在 TableView 的单元格焦点上更改委托的 sizeHint?
【发布时间】:2014-08-04 14:52:12
【问题描述】:

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

【问题讨论】:

  • if (option.state & QStyle::State_Selected) 有帮助吗?
  • @Nejat ,我试过了,没有帮助

标签: qt delegates model-view sizehint


【解决方案1】:

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

Qt Creator 本身的源代码(特别是在TaskView 小部件中)也使用了一种可能的解决方法是通过连接到QItemSelectionModel 来自己跟踪当前/选定的项目。 .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2022-10-16
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多