Qt 拖放 QListView 删除释放它的项目

标签 qt drag-and-drop qlistview

我正在研究一个可排序的小型 QlistView。

    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 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);
好吧,拖放工作但有一个问题,如果我将项目放在列表末尾以外的任何其他项目上替换。“拖动”项目替换“释放”项目。
QListView在不同场景下的截图
Screen shot of QListView  at different Scenarios

最佳答案

那是因为默认情况下 QStandardItemQt::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..

关于Qt 拖放 QListView 删除释放它的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10990571/

相关文章:

linux - 当 TEMPLATE=lib 时,如何强制 qmake 不创建指向目标的符号链接(symbolic link)?

qt - Webkit 上的 SpellChecker(拼写器)

javascript - Angular 拖放不适用于移动设备

c++ - 插槽调用了两次 qt

c++ - 如何在 QListView 中选择与底层 QSqlTableModel 的最后插入记录相对应的项目?

c++ - Qt中的SLOT类型是什么?

c++ - 尝试在 Raspberry Pi 上运行交叉编译的 Qt 时出现 "Illegal instruction"(Windows)

jquery 拖动并旋转到一定角度

javascript - 在 HTML5 拖放中,仅 Dragstart 会触发

qt - 如何将标题设置为 QListView