@raven-worx Many thanks! ModelTest did help. I resloved all Q_ASSERT and model updates fine!) You saved me many nights.
Posting code which works fine:
#include "StickerModel.hpp"
#include <QDebug>
#include "tdlibQt/TdlibJsonWrapper.hpp"
#include "tdlibQt/ParseObject.hpp"
namespace tdlibQt {
StickerModel::StickerModel(QObject *parent) : QAbstractItemModel(parent),
    m_client(TdlibJsonWrapper::instance())
{
    rootSet =     QSharedPointer<stickerSet>(new stickerSet);
    connect(m_client, &TdlibJsonWrapper::stickerSetReceived,
            this, &StickerModel::addStickerSet);
    //BUG? Lambda functions requires disconnection before dectruction?. Even disconnection doesnt help
    connect(m_client, &TdlibJsonWrapper::stickerSetsReceived,
            this, &StickerModel::stickersSetsReceived);
    connect(m_client, &TdlibJsonWrapper::stickersReceived,
            this, &StickerModel::stickersReceived);
    connect(m_client, &TdlibJsonWrapper::updateFile,
            this, &StickerModel::updateFile);
    connect(this, &StickerModel::downloadFileStart,
            this, &StickerModel::getFile);
}
StickerModel::~StickerModel()
{
    m_stikerSets.clear();
    m_installedStickerSets.clear();
}
void StickerModel::getAttachedStickerSets(const int file_id)
{
    m_client->getAttachedStickerSets(file_id);
}
void StickerModel::getStickerSet(const qint64 set_id)
{
    m_client->getStickerSet(set_id);
}
void StickerModel::getFavoriteStickers()
{
    m_client->getFavoriteStickers();
}
void StickerModel::getRecentStickers()
{
    m_client->getRecentStickers();
}
void StickerModel::getInstalledStickers(const bool is_masks)
{
    m_client->getInstalledStickerSets(is_masks);
}
void StickerModel::addTrendingStickerSets(const QJsonObject &stickerSetsObject)
{
    auto stickerSetsObj = ParseObject::parseStickerSets(stickerSetsObject);
    for (QSharedPointer<stickerSetInfo> val : stickerSetsObj->sets_)
        m_trendingStickerSets.append(val);
}
QSharedPointer<stickerSet> StickerModel::createStickerSet(const QString &name, const QString &title,
        const std::vector<QSharedPointer<sticker> > &stickers)
{
    if (stickers.size() == 0)
        return QSharedPointer<stickerSet>(nullptr);
    QSharedPointer<stickerSet> resultSet = QSharedPointer<stickerSet>(new stickerSet);
    resultSet->name_ = name.toStdString();
    resultSet->title_ = title.toStdString();
    resultSet->stickers_ = stickers;
    return resultSet;
}
StickerModel::StickerModelState StickerModel::modelState() const
{
    return m_state;
}
QHash<int, QByteArray> StickerModel::roleNames() const
{
    QHash<int, QByteArray>  roles;
    roles[ID] = "id";
    roles[IS_ARCHIVED] = "is_archived";
    roles[IS_INSTALLED] = "is_installed";
    roles[IS_MASKS] = "is_masks";
    roles[IS_OFFICIAL] = "is_official";
    roles[IS_VIEWED] = "is_viewed";
    roles[TITLE] = "title";
    roles[NAME] = "name";
    roles[STICKER] = "sticker";
    roles[EMOJI] = "emoji";
    roles[STICKERS_COUNT] = "stickers_count";
    roles[SET_STICKER_THUMBNAIL] = "set_thumbnail";
    roles[STICKER_FILE_ID] = "sticker_file_id";
    return roles;
}
QVariant StickerModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid())
        return QVariant();
    if (index.row() < 0)
        return QVariant();
    stickerSet *childItem = static_cast<stickerSet *>(index.internalPointer());
    if (!childItem)
        return QVariant();
    int rowIndex = index.row();
    int setNumber = 0;//index.parent().column() == 0 ? index.parent().row() : rowIndex;//getSetIndex(rowIndex);
    if (childItem == rootSet.data()) {
        setNumber = index.row();
        rowIndex = index.row();
    } else {
        setNumber = index.parent().row();
        rowIndex = index.row();
    }
    switch (role) {
    case ID:
        return  QString::number(m_stikerSets[setNumber]->id_);
    case IS_ARCHIVED:
        return    m_stikerSets[setNumber]->is_archived_;
    case IS_INSTALLED:
        return   m_stikerSets[setNumber]->is_installed_;
    case IS_MASKS:
        return    m_stikerSets[setNumber]->is_masks_;
    case IS_OFFICIAL:
        return    m_stikerSets[setNumber]->is_official_;
    case IS_VIEWED:
        return    m_stikerSets[setNumber]->is_viewed_;
    case TITLE:
        return   QString::fromStdString(m_stikerSets[setNumber]->title_);
    case NAME:
        return   QString::fromStdString(m_stikerSets[setNumber]->name_);
    case SET_STICKER_THUMBNAIL:
        return   QString::fromStdString(m_stikerSets[setNumber]->stickers_[0]->sticker_->local_->path_);
    case STICKERS_COUNT:
        return m_stikerSets[setNumber]->stickers_.size();
    case STICKER:
        if (index.parent().row() == -1)
            return QVariant();
        //    m_installedStickerSets[rowIndex]->covers_;
        if (m_stikerSets[setNumber]->stickers_[rowIndex]->sticker_->local_->is_downloading_completed_)
            return   QString::fromStdString(m_stikerSets[setNumber]->stickers_[rowIndex]->sticker_->local_->path_);
        if (m_stikerSets[setNumber]->stickers_[rowIndex]->thumbnail_->photo_->local_->is_downloading_completed_) {
            emit downloadFileStart(m_stikerSets[setNumber]->stickers_[rowIndex]->sticker_->id_, 12, index);
            return   QString::fromStdString(m_stikerSets[setNumber]->stickers_[rowIndex]->thumbnail_->photo_->local_->path_);
        }
        emit downloadFileStart(m_stikerSets[setNumber]->stickers_[rowIndex]->thumbnail_->photo_->id_, 12, index);
        return QVariant();
    case EMOJI: {
        if (index.parent().row() == -1)
            return QVariant();
        QString emojis = "";
        emojis += QString::fromStdString(m_stikerSets[setNumber]->stickers_[rowIndex]->emoji_);
        return emojis;
    }
    break;
    case STICKER_FILE_ID:
        if (index.parent().row() == -1)
            return QVariant();
        return m_stikerSets[setNumber]->stickers_[rowIndex]->sticker_->id_;
        break;
    default:
        return QVariant();
        break;
    }
    //    m_installedStickerSets[rowIndex]->id_;
    //    m_installedStickerSets[rowIndex]->is_archived_;
    //    m_installedStickerSets[rowIndex]->is_installed_;
    //    m_installedStickerSets[rowIndex]->is_masks_;
    //    m_installedStickerSets[rowIndex]->is_official_;
    //    m_installedStickerSets[rowIndex]->is_viewed_;
    //    m_installedStickerSets[rowIndex]->name_;
    //    m_installedStickerSets[rowIndex]->title_;
}
int StickerModel::rowCount(const QModelIndex &parent) const
{
    if (m_state == SendState || m_state == PreviewState) {
        stickerSet *childItem = static_cast<stickerSet *>(parent.internalPointer());
        if (parent == QModelIndex())
            return m_stikerSets.size();
        if (childItem == rootSet.data()) {
            return m_stikerSets.at(parent.row())->stickers_.size();
        } else
            return 0;
    }
    return 0;
}
void StickerModel::addInstalledStickerSets(const QJsonObject &stickerSetsObject)
{
    auto stickerSetsObj = ParseObject::parseStickerSets(stickerSetsObject);
    for (QSharedPointer<stickerSetInfo> val : stickerSetsObj->sets_) {
        m_installedStickerSets.append(val);
        if (m_state == SendState)
            getStickerSet(val->id_);
    }
}
void StickerModel::addStickerSet(const QJsonObject &stickerSetObject)
{
    auto stickerSetObj = ParseObject::parseStickerSet(stickerSetObject);
    if (stickerSetObj.data()) {
        beginInsertRows(QModelIndex(), m_stikerSets.size(), m_stikerSets.size());
        m_stikerSets.append(stickerSetObj);
        endInsertRows();
    }
}
void StickerModel::updateFile(const QJsonObject &fileObject)
{
    if (fileObject["@type"].toString() == "updateFile")
        processFile(fileObject["file"].toObject());
}
void StickerModel::processFile(const QJsonObject &fileObject)
{
    auto file = ParseObject::parseFile(fileObject);
    if (m_stickerUpdateQueue.keys().contains(file->id_)) {
        QVector<int> photoRole;
        QPersistentModelIndex viewIndex = m_stickerUpdateQueue[file->id_];
        qDebug() << viewIndex << "Row" << viewIndex.row() << "Column" << viewIndex.column() <<  viewIndex.parent().row();
        int rowIndex = viewIndex.row();
        int setIndex = viewIndex.parent().row();
        if (m_stikerSets[setIndex]->stickers_[rowIndex]->sticker_->id_ == file->id_)
            m_stikerSets[setIndex]->stickers_[rowIndex]->sticker_ = file;
        if (m_stikerSets[setIndex]->stickers_[rowIndex]->thumbnail_->photo_->id_ == file->id_)
            m_stikerSets[setIndex]->stickers_[rowIndex]->thumbnail_->photo_ = file;
        if (file->local_->is_downloading_completed_) {
            photoRole.append(STICKER);
            photoRole.append(SET_STICKER_THUMBNAIL);
        }
        //For child item
        emit dataChanged(viewIndex,
                         viewIndex, photoRole);
        //for thumbnails
        emit dataChanged(viewIndex.parent(),
                         viewIndex.parent(), photoRole);
        if (file->local_->is_downloading_completed_)
            m_stickerUpdateQueue.remove(file->id_);
    }
}
void StickerModel::stickersReceived(const QJsonObject &setObject)
{
    if (setObject["@extra"].toString() == "getFavoriteStickers")
        addFavoriteStickers(setObject);
    else
        addRecentStickers(setObject);
}
void StickerModel::stickersSetsReceived(const QJsonObject &setsObject)
{
    if (setsObject["@extra"].toString() == "getTrendingStickerSets")
        addTrendingStickerSets(setsObject);
    else
        addInstalledStickerSets(setsObject);
}
void StickerModel::changeStickerSet(const QString &setId, const bool isInstalled, const bool isArchived)
{
    m_client->changeStickerSet(setId.toLongLong(), isInstalled, isArchived);
}
QVariant StickerModel::getStickerUrl(const int setIndex, const int stickerIndex)
{
    return data(index(stickerIndex, 0, index(setIndex, 0)), DataRoles::STICKER);
}
QVariant StickerModel::getStickerEmoji(const int setIndex, const int stickerIndex)
{
    return data(index(stickerIndex, 0, index(setIndex, 0)), DataRoles::EMOJI);
}
QVariant StickerModel::getStickersCount(const int setIndex)
{
    return data(index(setIndex, 0), DataRoles::STICKERS_COUNT);
}
void StickerModel::setSet_id(QString set_id)
{
    if (m_set_id == set_id)
        return;
    m_set_id = set_id;
    emit set_idChanged(m_set_id);
}
void StickerModel::getFile(const int fileId, const int priority, const QModelIndex indexItem)
{
    m_client->downloadFile(fileId, priority);
    m_stickerUpdateQueue[fileId] = indexItem;
}
int StickerModel::columnCount(const QModelIndex &parent) const
{
    return 1;
}
QModelIndex StickerModel::index(int row, int column, const QModelIndex &parent) const
{
    if (!hasIndex(row, column, parent))
        return QModelIndex();
    if (parent.column() > -1)
        return createIndex(row, column, m_stikerSets.at(parent.row()).data());
    return createIndex(row, column, rootSet.data());
}
QModelIndex StickerModel::parent(const QModelIndex &child) const
{
    if (!child.isValid())
        return QModelIndex();
    stickerSet *childItem = static_cast<stickerSet *>(child.internalPointer());
    if (!childItem)
        return QModelIndex();
    if (childItem == rootSet.data())
        return QModelIndex();
    if (child.column() == -1)
        return QModelIndex();
    int rowPosition = 0;
    for (int i = 0; i < m_stikerSets.size(); i++)
        if (m_stikerSets.at(i).data() == childItem) {
            rowPosition = i;
            break;
        }
    return createIndex(rowPosition, 0, rootSet.data());
}
bool StickerModel::hasChildren(const QModelIndex &parent) const
{
    if (rowCount(parent) == 0)
        return false;
    return true;
}
QString StickerModel::set_id() const
{
    return m_set_id;
}
void StickerModel::addFavoriteStickers(const QJsonObject &stickersObject)
{
    auto stickersObj = ParseObject::parseStickers(stickersObject);
    auto resultSet = createStickerSet("Favorite", tr("Favorite"), stickersObj->stickers_);
    if (resultSet.data()) {
        beginInsertRows(QModelIndex(), m_stikerSets.size(), m_stikerSets.size());
        m_stikerSets.append(resultSet);
        endInsertRows();
    }
}
void StickerModel::addRecentStickers(const QJsonObject &stickersObjecct)
{
    auto stickersObj = ParseObject::parseStickers(stickersObjecct);
    auto resultSet = createStickerSet("Recent", tr("Recent"), stickersObj->stickers_);
    if (resultSet.data()) {
        beginInsertRows(QModelIndex(), m_stikerSets.size(),  m_stikerSets.size());
        m_stikerSets.append(resultSet);
        endInsertRows();
    }
}
void StickerModel::setModelState(StickerModel::StickerModelState state)
{
    if (m_state == state)
        return;
    m_state = state;
    beginResetModel();
    m_stikerSets.clear();
    m_installedStickerSets.clear();
    endResetModel();
    switch (m_state) {
    case SendState:
        getFavoriteStickers();
        getRecentStickers();
        getInstalledStickers();
        break;
    case PreviewState:
        if (set_id().length() > 0)
            getStickerSet(set_id().toLongLong());
        break;
    case SettingsState:
    case TrendingState:
    default:
        break;
    }
    emit modelStateChanged(m_state);
}
} //tdlibQt
Also, to ensure that ModelTest work, I created rootContext as single model and opened qml page with this model to make ModelTest work. Resolving each seg fault resolved issue