2
我想覆蓋函數drawBranches() in QTreeView。
我分類了QTreeView類,然後我複製drawBranches()函數從here。在這個函數改變任何事情之前,我希望確保它工作第一,但構建失敗,出現此錯誤:Qt - 覆蓋QTreeView :: drawBranches()
error: 'const QTreeViewPrivate* QTreeView::d_func() const' is private
inline const Class##Private* d_func() const { return reinterpret_cast<const Class##Private *>(qGetPtrHelper(d_ptr)); } \
這裏是我的代碼:
class MyTreeView : public QTreeView
{
Q_OBJECT
public:
MyTreeView(QWidget *parent =0) : QTreeView(parent) {}
void drawBranches(QPainter * painter, const QRect &rect, const
QModelIndex &index)const
{
Q_D(const QTreeView);
const bool reverse = isRightToLeft();
const int indent = d->indent;
const int outer = d->rootDecoration ? 0 : 1;
const int item = d->current;
const QTreeViewItem &viewItem = d->viewItems.at(item);
int level = viewItem.level;
QRect primitive(reverse ? rect.left() : rect.right() + 1, rect.top(), indent, rect.height());
....// Moore lines that I copied
else
opt.state &= ~QStyle::State_MouseOver;
style()->drawPrimitive(QStyle::PE_IndicatorBranch, &opt, painter, this);
current = ancestor;
ancestor = current.parent();
}
painter->setBrushOrigin(oldBO);
}
};
有許多行,其中d指針被使用並且它是私有的,e.g d->indent;
。
如何在不違反私人角色的情況下獲得對此指針的引用?
爲什麼我要重寫這個功能:我想隱藏的,除了那些誰擁有水平零(高級別)的所有項目的展開/摺疊指標,我想通過重寫這個功能,我可以做到這一點。
感謝
感謝回覆和感謝提示:''從官方鏡像'。我有一個問題與QT + = gui-private拒絕包含,但我想我可以解決它。 –
Phiber
添加QT + =小部件 - 私人而不是gui-private讓它起作用 – Phiber