Qt拖放QListView在释放时删除该项

5

我正在开发一个可排序的小型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的屏幕截图 不同情况下QListView的屏幕截图

1个回答

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

item1->setFlags(Qt::ItemIsDropEnabled); 没有起作用。 - user671253
你应该使用“reset”而不是“set”。我已经更新了我的答案。 - Ammar
有什么建议可以让它像http://jqueryui.com/demos/sortable/一样工作。我的意思是,当您移除该项时,会有一个真空空间随着拖动的项目移动。谢谢。 - user671253

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接