gpt4 book ai didi

c++ - 如何在 QStyledItemDelegate 中绘制整行的背景?

转载 作者:太空宇宙 更新时间:2023-11-04 14:27:45 29 4
gpt4 key购买 nike

我有一个 QTableView,我正在为其设置自定义 QStyledItemDelegate。

除了自定义项绘制之外,我还想为选择/悬停状态设置行的背景色样式。我想要的外观类似于此 KGet 屏幕截图: KGet's Row Background http://www.binaryelysium.com/images/kget_background.jpeg

这是我的代码:

void MyDelegate::paint( QPainter* painter, const QStyleOptionViewItem& opt, const    QModelIndex& index ) const
{
QBrush backBrush;
QColor foreColor;
bool hover = false;
if ( opt.state & QStyle::State_MouseOver )
{
backBrush = opt.palette.color( QPalette::Highlight ).light( 115 );
foreColor = opt.palette.color( QPalette::HighlightedText );
hover = true;
}
QStyleOptionViewItemV4 option(opt);
initStyleOption(&option, index);
painter->save();
const QStyle *style = option.widget ? option.widget->style() : QApplication::style();
const QWidget* widget = option.widget;
if( hover )
{
option.backgroundBrush = backBrush;
}
painter->save();
style->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, widget);
painter->restore();
switch( index.column() )
{
case 0: // we want default behavior
style->drawControl(QStyle::CE_ItemViewItem, &option, painter, widget);
break;
case 1:
// some custom drawText
break;
case 2:
// draw a QStyleOptionProgressBar
break;
}
painter->restore();
}

结果是每个单独的单元格只有在鼠标悬停在它上面时才会接收到鼠标悬停背景,而不是整行。很难描述,所以这里是截图: The result of the above code http://www.binaryelysium.com/images/loader_bg.jpeg

在那张图片中,鼠标位于最左侧的单元格上,因此突出显示了背景..但我希望在整行上绘制背景。

我怎样才能做到这一点?

编辑:经过深思熟虑,我意识到 QStyle::State_MouseOver 状态仅传递给鼠标悬停的实际单元格,并且当为 QStyle::行中的其他单元格调用 paint 方法时: State_MouseOver 未设置。

那么问题就变成了是否存在 QStyle::State_MouseOver_Row 状态(答案:否),那么我该如何实现呢?

最佳答案

您需要告诉 View 在鼠标悬停在行上时更新其单元格,因此我建议在您的模型中跟踪它。然后在绘制事件中,您可以使用自定义数据角色从模型索引中请求该数据。

关于c++ - 如何在 QStyledItemDelegate 中绘制整行的背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2434004/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com