struct QTreeViewItem{ // . . . QModelIndex index; // we remove items whenever the indexes are invalidated // . . .};
class Q_GUI_EXPORT QTreeViewPrivate : public QAbstractItemViewPrivate{ // . . . private : // . . . mutable QVector<QTreeViewItem> viewItems // . . .}
void QTreeView::drawTree(QPainter *painter, const QRegion ®ion) const{ Q_D(const QTreeView); const QVector<QTreeViewItem> viewItems = d->viewItems; // . . . // paint the visible rows for (; i < viewItems.count() && y <= area.bottom(); ++i) { // . . . drawRow(painter, option, viewItems.at(i).index); // . . . } // . . .}
void QTreeView::drawRow(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const{ // . . . const QModelIndex parent = index.parent(); // . . .}
C++ (Qt)void MyTreeWidget::paintEvent( ...){ MyModel * m = qobject_cast <MyModel *> model(); if (m && !m->mLocker.tryLockForRead()) { // если модель пишется m->mRepaintFlag = true; // ставим флаг перерисовки после окончания записи return; // уходим } ...}