#include "QQuickDetailsView.h" #include "private/qqmldata_p.h" #include #include "qqmlcontext.h" #include "QQuickDetailsViewPrivate.h" #include "QQuickDetailsViewRow.h" #include "QQuickFunctionLibrary.h" void QQuickDetailsViewPrivate::initItemCallback(int serializedModelIndex, QObject* object) { QQuickTreeViewExPrivate::initItemCallback(serializedModelIndex, object); auto item = qobject_cast(object); if (!item) return; const QModelIndex& index = m_treeModelToTableModel.mapToModel(serializedModelIndex);; IDetailsViewRow* node = static_cast(index.internalPointer()); node->setupItem(item); } QQuickDetailsView::QQuickDetailsView(QQuickItem* parent /*= nullptr*/) : QQuickTreeViewEx(*(new QQuickDetailsViewPrivate()),parent) { setModel(QVariant::fromValue(d_func()->mModel)); setReuseItems(false); setEditTriggers(QQuickTableView::EditTrigger::DoubleTapped); } qreal QQuickDetailsView::getSpliterPencent() const { return d_func()->mSpliterPencent; } void QQuickDetailsView::setSpliterPencent(qreal val) { if(val != d_func()->mSpliterPencent){ d_func()->mSpliterPencent = val; Q_EMIT asSpliterPencentChanged(val); } } void QQuickDetailsView::setObject(QObject* inObject) { if (inObject != d_func()->mModel->getObject()) { d_func()->mModel->setObject(inObject); Q_EMIT asObjectChanged(inObject); } } QObject* QQuickDetailsView::getObject() const { return d_func()->mModel->getObject(); } void QQuickDetailsView::componentComplete() { QQmlEngine* engine = qmlEngine(this); QQmlComponent* delegate = new QQmlComponent(engine, this); engine->rootContext()->setContextProperty("helper", QQuickFunctionLibrary::Get()); delegate->setData(R"( import QtQuick; import QtQuick.Controls; import QtQuick.Layouts; import QtQuick.DetailsView; Item { id: detailsDelegate readonly property real indent: 20 readonly property real padding: 5 required property DetailsView detailsView required property int row required property bool isTreeNode required property bool expanded required property int hasChildren required property int depth implicitWidth: detailsView.width implicitHeight: heightProxy ? heightProxy.height + 5 : 30 TapHandler { onTapped: detailsView.toggleExpanded(row) } onImplicitHeightChanged: { detailsView.invalidateLayout(); } })", QUrl("QQuickDetailsView.componentComplete"));; setDelegate(delegate); QQuickTreeViewEx::componentComplete(); }