Qt拖放QListView删除它被释放的项目
Posted
技术标签:
【中文标题】Qt拖放QListView删除它被释放的项目【英文标题】:Qt Drag and Drop QListView removing the item on which it is released 【发布时间】:2012-06-14 23:25:20 【问题描述】:我正在开发一个可排序的小型 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在不同场景下的截图
【问题讨论】:
【参考方案1】:这是因为默认情况下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);没有做这项工作 你应该是reset
它不是 set
它。我已经更新了我的答案。
任何关于我如何使它像jqueryui.com/demos/sortable/.I 一样工作的建议意味着当你删除项目时,有一个真空空间会随着拖动的项目移动。谢谢以上是关于Qt拖放QListView删除它被释放的项目的主要内容,如果未能解决你的问题,请参考以下文章
Qt - 如何将 QListView 项目转移到另一个 QListView?