如何让QTreeView选中行的颜色拓展到整个width?

東條・スペンサー・咲 发布于 2014/07/12 10:10
阅读 1K+
收藏 2
Qt

现在在用QTreeView写一个播放列表,遇到了这样一个问题:

我设置了整行选中以后发现QTreeView并不能选中每一行后面的空白的地方:

读了一下QTreeView的源代码,发现它只绘制了当前所有visible的Column,后面的就全无视掉了。于是想到了重写Delegate然后强行把宽度改成width(),但是因为使用了透明色,就会导致颜色从左到右一个一个深……

现在想到了添加一个空白的column然后使用拉伸最后一个column的办法,中间不断调整column的宽度,但是这个方法太2了,而且实现出来的效果特别差,有点像重写QTreeViewPrivate里面的绘制整棵树的那个函数,苦于不会使用d和q指针。求教一下大侠们如何实现这个效果?如果不用这两个指针就更好了~~

加载中
0
東條・スペンサー・咲
東條・スペンサー・咲

这个问题终于解决了:


void KNMusicTreeViewBase::drawRow(QPainter *painter,
                                  const QStyleOptionViewItem &options,
                                  const QModelIndex &index) const
{
    if(index.row()&1)
    {
        //Draw the alternative background.
        painter->fillRect(QRect(options.rect.x(),
                                options.rect.y(),
                                width(),
                                options.rect.height()),
                          m_alternateColor);
    }
    QTreeView::drawRow(painter, options, index);
}



以上内容参见 http://git.oschina.net/Miyanaga/Mu中的 / src / plugin / module / knmusicplugin / sdk / knmusictreeviewbase.h 文件。


0
東條・スペンサー・咲
東條・スペンサー・咲
自己顶一下,没有人知道么?
0
来自山卡拉的你
来自山卡拉的你

你说的是这种效果么?

我就是重写Delegate的paint函数,在里面画选中框,图标和文字

cliffordl
cliffordl
能不能,介绍一下怎么实施的?小弟也遇到这样的问题了
0
東條・スペンサー・咲
東條・スペンサー・咲

引用来自“Gateslu”的评论

你说的是这种效果么?

我就是重写Delegate的paint函数,在里面画选中框,图标和文字

额,您这个是一个Column麼?我这个是多个Column的最右侧有孔白的现象。

重写delegate的paint改变width的话,由于颜色带有alpha通道,所以结果就是越右侧的颜色越深。

返回顶部
顶部