我正在尝试在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);
}
该代码生成this
等结果我很想知道如何让这次运行更顺畅。我曾尝试在委托中执行此操作,但随后委托需要知道所选的所有索引,并且无法绘制由QTableView绘制的网格线。另外,我的表类需要知道边框的绘制位置。
答案 0 :(得分:4)
尝试调用update();在您的selectionChanged函数中。这将减慢您的实施速度,但会删除垃圾。