Ser*_*dis 1 c++ qt qlistview qt5
我用QStringListModel创建了一个QListView.
listModel = new QStringListModel(ui->listView);
ui->listView->setModel(listModel);
ui->listView->setEditTriggers(QListView::NoEditTriggers);
ui->listView->setDragDropMode(QListView::InternalMove);
Run Code Online (Sandbox Code Playgroud)
我使用以下方法添加项目:
void MainWindow::addItem(QString result)
{
if (result == "")
return;
listModel->insertRow(listModel->rowCount());
QModelIndex a = listModel->index(listModel->rowCount()-1);
listModel->setData(a,result);
}
Run Code Online (Sandbox Code Playgroud)
问题是,当您拖动列表中的项目并尝试将其移动到另一个位置时,它更喜欢覆盖您拖动它的项目.我不希望通过拖放操作删除项目.
从文档中我们得到了一些关于在QListView :: dragDropOverwriteMode中控制覆盖行为的位置的提示:
注意:这不是为了防止覆盖项目.该模型的实现的标志()应该做的是通过不返回的Qt :: ItemIsDropEnabled.
这告诉我们模型是控制它的模型.然后查看QStringListModel :: flags(const QModelIndex&index)const的文档,我们可以看到它默认启用覆盖:
从QAbstractItemModel :: flags()重新实现.返回具有给定索引的项的标志.有效项目已启用,可选,可编辑,启用拖动和启用拖放.
因此,为了更改此行为,您需要自定义模型(即至少从QStringListModel派生)并将flags(const QModelIndex & index) const方法的行为更改为不返回Qt::ItemIsDropEnabled.
这应该可以阻止你的输入被覆盖.
| 归档时间: |
|
| 查看次数: |
1055 次 |
| 最近记录: |