Поиск конца операции перетаскивания в QAbstractItemView

Я создал собственную модель прокси, унаследованную QSortFilterProxyModel. Моя исходная модель для вышеупомянутой прокси-модели также является пользовательской моделью, унаследованной QAbstractTableModel. Затем я установил свою собственную модель прокси на QTableView.

В этой пользовательской модели прокси я переопределил функцию mimeData (..). Это так.

QMimeData* CustomProxyModel::mimeData( const QModelIndexList & rListIndexes ) const
{
    QMimeData *pMimeData = new QMimeData();

    //some code here

    connect(pMimeData, SIGNAL( destroyed(QObject*) ), this, SLOT( OnDestroyDraggedItem() ) );

    return pMimeData;
}

В Qt4.7 вскоре после того, как пользователь поместил элемент QTableView куда-то, был вызван слот OnDestroyDraggedItem(). Другими словами, объект QMimeData удаляется вскоре после операции перетаскивания.

Но в Qt 5.1 слот OnDestroyDraggedItem() никогда не вызывается. Другими словами, объект QMimeData никогда не удаляется после операции перетаскивания.

Я делаю что-то неправильно? Или в Qt 5.1 произошла утечка памяти после операции перетаскивания? Есть ли другой способ найти конец операции перетаскивания?

1 ответ

Может быть, немного поздно - но ты не можешь просто унаследовать QMimeData и сделать что-нибудь в деструкторе? Конечно, код должен быть небольшим и безопасным - создание исключений в деструкторах может вызвать странное поведение:)

Другие вопросы по тегам