2016-12-31 5 views
-1

У меня есть ComboBox в моем QML файл:Проблема при удалении строки из ComboBox модели

import QtQuick 2.4 
import QtQuick.Controls 2.0 
// ... 
ComboBox { 
    id: serailPortNameBox 
    model: availableSerialPortsModel 
    textRole: "display" 
} 

и модели availableSerialPortsModel, который содержит последовательные имена портов в настоящее время доступны в системе:

QStringListModel availableSerialPortsModel; 
QList<QSerialPortInfo> portsList = QSerialPortInfo::availablePorts(); 
for (auto port : portsList) { 
    int row = availableSerialPortsModel.rowCount(); 
    availableSerialPortsModel.insertRow(row); 
    QModelIndex index = availableSerialPortsModel.index(row); 
    availableSerialPortsModel.setData(index, port.portName(), Qt::DisplayRole); 
} 
// ... 
engine.rootContext()->setContextProperty("availableSerialPortsModel", availableSerialPortsModel); 

combobox before removing

Когда я удаляю несколько последовательных портов:

for (int row = availableSerialPortsModel.rowCount() - 1; row >= 0; --row) { 
    QModelIndex index = availableSerialPortsModel.index(row); 
    QString name = availableSerialPortsModel.data(index, Qt::DisplayRole).toString(); 

    if (portsToRemove.contains(name)) { 
     availableSerialPortsModel.removeRow(row); 
    } 
} 

ComboBox удаляет этот порт с каким-то визуальным вопросом: combobox after removing

это просто ошибка ог ComboBox или я делаю что-то не так? Моя версия Qt - 5.7.0 на устройстве Apple с версией Sierra 10.12.2.

Here простой проект, который воспроизводит проблему.

+0

Вам нужно сообщить миру, что вы удаляете строки. См. Http://doc.qt.io/qt-5/qabstractitemmodel.html#beginRemoveRows и http://doc.qt.io/qt-5/qabstractitemmodel.html#endRemoveRows –

+4

Это была ошибка в Qt 5.7.0 , который был исправлен в Qt 5.7.1: https://bugreports.qt.io/browse/QTBUG-54573 - попробуйте обновить. – jpnurmi

+0

@Jesper Juhl QStringListModel - это полный класс, 'removeRow()' реализация уже вызывает эти функции. –

ответ

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