#include #include struct DataSourceItem::DataSourceItemPrivate { explicit DataSourceItemPrivate(QVector data) : m_Parent{nullptr}, m_Children{}, m_Data{std::move(data)} { } DataSourceItem *m_Parent; std::vector > m_Children; QVector m_Data; }; DataSourceItem::DataSourceItem(QVector data) : impl{spimpl::make_unique_impl(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; }