5

Sortable である小さな 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 のスクリーン ショット

4

1 に答える 1

8

これは、デフォルトで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..
于 2012-06-12T08:26:35.247 に答える