Я получил класс QTreeWidget и создал свой собственный QtPropertyTree. Чтобы заполнить дерево виджетами (флажки, кнопки и т.д.), Я использую следующий код:
// in QtPropertyTree.cpp
QTreeWidgetItem topItem1 = new QTreeWidgetItem(this);
QTreeWidgetItem subItem = new QTreeWidgetItem(this);
int column1 = 0
int Column2 = 1;
QPushButton myButton = new QPushButton();
this->setIndexWidget(this->indexFromItem(this->subItem,column1), myButton);
QCheckBox myBox = new QCheckBox();
this->setIndexWidget(this->indexFromItem(this->subItem,column2), myBox);
Это прекрасно работает, но проблема в том, что я хочу избежать использования функции indexFromItem, поскольку она защищена, и есть другие классы, которые заполняют дерево и нуждаются в доступе к этой функции. Вы знаете какую-либо альтернативу использованию этой функции?
Вы можете попробовать использовать модель QTreeWidget (QAbstractItemModel), чтобы получить нужный индекс по номерам столбцов и строк:
// Row value is 1 because I want to take the index of
// the second top level item in the tree.
const int row = 1;
[..]
QPushButton myButton = new QPushButton();
QModelIndex idx1 = this->model()->index(row, column1);
this->setIndexWidget(idx1, myButton);
QCheckBox myBox = new QCheckBox();
QModelIndex idx2 = this->model()->index(row, column2);
this->setIndexWidget(this->indexFromItem(idx2, myBox);
ОБНОВИТЬ
Для подпунктов можно использовать один и тот же подход.
QModelIndex parentIdx = this->model()->index(row, column1);
// Get the index of the first child item of the second top level item.
QModelIndex childIdx = this->model()->index(0, column1, parentIdx);
Очевидное решение состоит в том, чтобы обезопасить indexFromItem
следующим образом:
class QtPropertyTree {
...
public:
QModelIndex publicIndexFromItem(QTreeWidgetItem * item, int column = 0) const
return indexFromItem (item, column) ;
}
} ;