2014-02-17 4 views
1

Я создал QListView с QStringListModel.Остановить QListView от удаления записей при перетаскивании

listModel = new QStringListModel(ui->listView); 
ui->listView->setModel(listModel); 
ui->listView->setEditTriggers(QListView::NoEditTriggers); 
ui->listView->setDragDropMode(QListView::InternalMove); 

И я добавить элементы с помощью:

void MainWindow::addItem(QString result) 
{ 
    if (result == "") 
     return; 
    listModel->insertRow(listModel->rowCount()); 
    QModelIndex a = listModel->index(listModel->rowCount()-1); 
    listModel->setData(a,result); 
} 

Проблема заключается в том, когда вы перетащите элемент в списке и попытаться переместить его в другое место, он предпочитает переписана деталь, то вы перетащите его. Я никогда не хочу, чтобы элемент был удален действием перетаскивания.

ответ

4

Из документации мы получаем немного намека, где искать для управления перезаписью поведения в QListView::dragDropOverwriteMode:

Примечания: Это не предназначено, чтобы предотвратить перезапись элементов. модель реализация флаги() должны сделать это, не возвращая Qt :: ItemIsDropEnabled.

Это говорит нам, что модель контролирует ее. Затем, глядя на документацию для QStringListModel::flags(const QModelIndex & index) const мы можем увидеть это позволит перезапись по умолчанию:

Переопределено из QAbstractItemModel :: флагов(). Возвращает флаги для элемента с заданным индексом. Допустимые элементы включены, могут быть выбраны, доступны для редактирования, перетаскиваются и включена.

Так что для того, чтобы изменить это поведение, вам нужно будет настроить модель (т.е. выводит из QStringListModel как минимум) и изменить поведение метода flags(const QModelIndex & index) const не возвращать Qt::ItemIsDropEnabled.

Это должно остановить вашу запись от перезаписи.

+0

Вам не нужно подклассифицировать модель. Если вы используете модель QStandardItem, вы можете создать QStandardItem, установить соответствующие флаги и использовать этот элемент в '' 'setItemPrototype()' ''. – Michal

 Смежные вопросы

  • Нет связанных вопросов^_^