簡體   English   中英

Qt 拖放 QListView 刪除釋放它的項目

[英]Qt Drag and Drop QListView removing the item on which it is released

我正在研究一個可排序的小型 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在不同場景下的截圖

這是因為QStandardItem默認設置了Qt::ItemIsDropEnabled標志。 只需使用QStandardItem::setFlags()函數將其刪除QStandardItem::setFlags() 添加以下幾行:

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

iListView->showDropIndicator(); // For convenience..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM