Хочу создать свою модель дерева, получается вот такое:
Как сделать чтобы отображался корневой элемент?
class TreeItem
{
public:
explicit TreeItem(const QString &data, TreeItem* parent = 0);
~TreeItem();
void appendChild(TreeItem *child);
void setParent(TreeItem *parent);
TreeItem *child(int row);
int childCount() const;
QString data() const;
int row() const;
TreeItem *parentItem();
private:
QList<TreeItem*> _childItems;
QString _data;
TreeItem* _parentItem;
};
class TreeModel : public QAbstractItemModel
{
public:
explicit TreeModel( const QString &data, QObject *parent = 0 );
~TreeModel();
QVariant data( const QModelIndex &index, int role ) const override;
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
Qt::ItemFlags flags( const QModelIndex &index ) const override;
QModelIndex index( int row, int column, const QModelIndex &parent = QModelIndex() ) const override;
QModelIndex parent( const QModelIndex &index) const override;
int rowCount( const QModelIndex &parent = QModelIndex() ) const override;
int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
private:
TreeItem* _rootItem;
};
QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent ) const
{
qDebug() << "TreeModel::index";
if ( !hasIndex(row, column, parent) )
return QModelIndex();
TreeItem* parentItem;
if ( !parent.isValid() )
parentItem = _rootItem;
else
parentItem = static_cast<TreeItem*>( parent.internalPointer() );
TreeItem* childItem = parentItem->child(row);
if (childItem)
return createIndex(row, column, childItem);
else
return QModelIndex();
}
QModelIndex TreeModel::parent(const QModelIndex &index) const
{
qDebug() << "TreeModel::parent";
if (!index.isValid())
return QModelIndex();
TreeItem *childItem = static_cast<TreeItem*>(index.internalPointer());
TreeItem *parentItem = childItem->parentItem();
if (parentItem == _rootItem)
return QModelIndex();
return createIndex(parentItem->row(), 0, parentItem);
}
MainWindow::MainWindow()
{
mainWindow.setupUi(this);
TreeModel* model = new TreeModel("abc");
mainWindow.treeView->setModel(model);
}
Не зря функция для корневого элемента дерева называется invisibleRootItem.
Добавь в свою модель еще один уровень, начиная ветвление только со 2-го уровня, тогда в отображаемой части будт виден один корень.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть приложение с пулом потоков
Разбираюсь с абстрактными классами в java и в качестве примера их использования приводиться фабричный метод, и говориться что в данном случае...
Имеется Spring boot приложение, которое перегоняет большое количество данных получаемых по API в удаленную БД (MySQL)В качестве пула соединений использую...
Почему нельзя в интерфейсе задать сигнатуру конструктора без реализации?