#include #include struct DataSourceItem::DataSourceItemPrivate { explicit DataSourceItemPrivate(DataSourceItemType type, QVector data) : m_Parent{nullptr}, m_Children{}, m_Type{type}, m_Data{std::move(data)} { } DataSourceItem *m_Parent; std::vector > m_Children; DataSourceItemType m_Type; QVector m_Data; }; DataSourceItem::DataSourceItem(DataSourceItemType type, QVector data) : impl{spimpl::make_unique_impl(type, std::move(data))} { } void DataSourceItem::appendChild(std::unique_ptr child) noexcept { child->impl->m_Parent = this; impl->m_Children.push_back(std::move(child)); } DataSourceItem *DataSourceItem::child(int childIndex) const noexcept { if (childIndex < 0 || childIndex >= childCount()) { return nullptr; } else { return impl->m_Children.at(childIndex).get(); } } int DataSourceItem::childCount() const noexcept { return impl->m_Children.size(); } QVariant DataSourceItem::data(int dataIndex) const noexcept { return impl->m_Data.value(dataIndex); } DataSourceItem *DataSourceItem::parentItem() const noexcept { return impl->m_Parent; } DataSourceItemType DataSourceItem::type() const noexcept { return impl->m_Type; }