void SnapshotActionDialog::setDomainSnapshots()
{
    if ( nullptr==ptr_ConnPtr || nullptr==*ptr_ConnPtr ) {
        emit ptrIsNull();
        return;
    };
    domain = virDomainLookupByName(
                *ptr_ConnPtr, domName.toUtf8().data());
    int namesLen = virDomainSnapshotNum(
                domain, VIR_DOMAIN_SNAPSHOT_LIST_ROOTS);
    if ( namesLen>0 ) {
        char *names;
        int ret = virDomainSnapshotListNames(
                    domain,
                    &names,
                    namesLen,
                    VIR_DOMAIN_SNAPSHOT_LIST_ROOTS);
        if ( ret>0 ) {
            for (int i = 0; i<ret; i++) {
                addSnapshotChild(
                            i,
                            snapshotTree->rootIndex(),
                            (&names)[i]);
            };
        };
    };
}
void SnapshotActionDialog::addSnapshotChild(int row, const QModelIndex &parent, char *name)
{
    // flags: extra flags; not used yet, so callers should always pass 0
    virDomainSnapshotPtr snapShot =
            virDomainSnapshotLookupByName(domain, name, 0);
    char *xmlDesc = virDomainSnapshotGetXMLDesc(snapShot, 0);
    QString _desc;
    QString _data(" -- ");
    if ( NULL!=xmlDesc ) {
        QDomDocument doc;
        doc.setContent(QString(xmlDesc));
        free(xmlDesc);
        QDomElement _el = doc
                .firstChildElement("domainsnapshot")
                .firstChildElement("creationTime");
        if ( !_el.isNull() ) {
            _data.clear();
            _data.append(
                  QDateTime::fromMSecsSinceEpoch(
                      _el.text().toULongLong()*1000)
                        .toString("yyyy-MM-dd_HH:mm:ss"));
        };
        _el = doc
                .firstChildElement("domainsnapshot")
                .firstChildElement("description");
        if ( !_el.isNull() ) {
            _desc.clear();
            _desc.append(_el.text());
        };
    };
    // flags: extra flags; not used yet, so callers should always pass 0
    int current = virDomainSnapshotIsCurrent(snapShot, 0);
    if ( NULL!=snapShot ) {
        model->insertRow(row, parent);
        model->setData(model->index(row, 0, parent), name, Qt::DisplayRole);
        model->setData(model->index(row, 0, parent), (current>0), Qt::DecorationRole);
        model->setData(model->index(row, 0, parent), _desc, Qt::ToolTipRole);
        model->setData(model->index(row, 1, parent), _data, Qt::DisplayRole);
        // By default, this command covers only direct children; use flag=0
        int namesLen = virDomainSnapshotNumChildren(snapShot, 0);
        if ( namesLen>0 ) {
            char *names;
            int ret = virDomainSnapshotListChildrenNames(
                        snapShot, &names, namesLen, 0);
            if ( ret>0 ) {
                for (int i = 0; i<ret; i++) {
                    addSnapshotChild(i, model->index(row, 0, parent), (&names)[i]);
                };
            };
        };
        virDomainSnapshotFree(snapShot);
    };
}