Qt QTableView在活动单元格周围绘制边框

buc*_*uck 6 qt border qtableview qitemdelegate

我正在尝试在QTableView中实现类似Excel的行为,其中边框绘制在整个当前选择周围.我尝试了这种感觉就像一百种不同的方式,并不断遇到问题.我可以很容易地绘制边框,但只要选择更改,就会留下边框的残余.这是我在QTableView :: paintEvent中尝试过的一个例子......


void MyTableView::paintEvent(QPaintEvent* event)
{
    // call QTableView's paint event first so we can draw over it
    QTableView::paintEvent(event);

    // activeSelection is a list of indexes that is updated in another function
    // the function also calls QTableView::repaint whenever this list changes
    // in an attempt to erase the previously drawn border
    if(!activeSelection.size())
        return;

    QRect rect = visualRect(activeSelection.at(0)) |
           visualRect(activeSelection.at(activeSelection.size() - 1));
    // temporarily draw smaller border so it doesn't lie on the grid lines
    rect.adjust(4, 4, -4, -4);
    QPen pen(Qt::black, 2);
    QPainter painter(viewport());
    painter.setPen(pen);
    painter.drawRect(rect);
}
Run Code Online (Sandbox Code Playgroud)

该代码产生的结果如

我很想知道如何让这次运行更顺畅.我曾尝试在委托中执行此操作,但随后委托需要知道所选的所有索引,并且无法绘制由QTableView绘制的网格线.另外,我的表类需要知道边框的绘制位置.

Rai*_*aiv 4

尝试调用 update(); 在您的选择更改功能中。这会减慢你的实施速度,但会消除垃圾。

  • 附录:我修复了它 - 如果你调用 viewport()->update(); 相反,它解决了所有问题。谢谢! (2认同)