Вопрос по qt, qlistview, drag-and-drop – Qt Drag and Drop QListView, удаляющий элемент, на котором он выпущен

5

Я работаю над небольшим QlistView, который является Sortable.

    iListView = new QListView(this);
    //Creating a standard item model
    iStandardModel = new QStandardItemModel(this);

    //First item
    QStandardItem* item1 = new QStandardItem(QIcon(":/cover-story-album-art.jpg"),"First Item");
    //Second item
    QStandardItem* item2 = new QStandardItem(QIcon(":/cover-story-album-art.jpg"),"Second item");
    //third item 
    QStandardItem* item3 = new QStandardItem(QIcon(":/cover-story-album-art.jpg"),"Third![enter image description here][1] item");

    //Appending the items into model
    iStandardModel->appendRow(item1);
    iStandardModel->appendRow(item2);
    iStandardModel->appendRow(item3);

    //Setting the icon size
    iListView->setIconSize(QSize(40,30));

    //Setting the model
    iListView->setModel(iStandardModel);

    //Setting listview geometry
    iListView->setGeometry(QRect(0,0,240,320));
    iListView->setDragEnabled(true);
    iListView->setAcceptDrops(true);
    iListView->setDragDropMode(QAbstractItemView::InternalMove);

Хорошо, перетаскивание работает, но есть проблема, если я отбрасываю элемент на любой другой элемент, замененный, кроме конца списка. & Quot; перетащил & quot; элемент заменяет & quot; выпущен на & quot; вещь.

Screen shot of QListView at different Scenarios Screen shot of QListView  at different Scenarios

Ваш Ответ

1   ответ
7

Это потому, что по умолчаниюQStandardItem имеетQt::ItemIsDropEnabled флаг установлен. Просто удалите его, используяQStandardItem::setFlags() функция. Добавьте следующие строки:

item1->setFlags(item1->flags() ^ (Qt::ItemIsDropEnabled));
item2->setFlags(item2->flags() ^ (Qt::ItemIsDropEnabled));
item3->setFlags(item3->flags() ^ (Qt::ItemIsDropEnabled));

iListView->showDropIndicator(); // For convenience..
Спасибо за ответ. Можете ли вы привести пример?
Любое предложение о том, как я могу заставить его работать какjqueryui.com/demos/sortable/.I означает, что при удалении предмета появляется вакуумное пространство, которое перемещается вместе с перетаскиваемым предметом.
Вы предполагаетеreset не этоset Это. Я обновил свой ответ.
item1- & GT; setFlags (Qt :: ItemIsDropEnabled); не выполняет работу
спасибо за обновление

Похожие вопросы