6
我試圖在QTableView中實現類似Excel的行爲,其中在整個當前選區周圍繪製邊框。我嘗試過這種方式,感覺像是有一百種不同的方式,並不斷遇到問題。我可以很容易地繪製邊框,但只要選擇發生變化就會留下邊框的殘留物。下面是一個例子,我在QTableView中嘗試:: ...的paintEventQt QTableView在活動單元格周圍繪製邊框
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繪製的網格線。另外,我的表類需要知道邊框的繪製位置。
謝謝!現在工作好多了。儘管如此,你仍然可以看到一些點點滴滴(http://i.imgur.com/9Zoyw.png)。如果你知道是什麼讓我知道,否則你已經幫了很多。 – buck
附錄:我修正了它 - 如果你調用viewport() - > update();相反它修復了所有的問題。謝謝! – buck