6
QTableViewに同様のExcelの動作を実装しようとしていますが、現在の選択範囲全体に境界線が描画されています。私はこれを100種類の方法のように感じ、問題を解決し続けました。私は境界線を十分に簡単に描くことができますが、境界線の残りの部分は、選択が変わるたびに残されます。ここで私はQTableViewで試してみた:: paintEvent ...Qt 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