У меня есть 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);
Когда я удаляю несколько последовательных портов:
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
или я делаю что-то не так? Моя версия Qt - 5.7.0 на устройстве Apple с версией Sierra 10.12.2.
Here простой проект, который воспроизводит проблему.
Вам нужно сообщить миру, что вы удаляете строки. См. Http://doc.qt.io/qt-5/qabstractitemmodel.html#beginRemoveRows и http://doc.qt.io/qt-5/qabstractitemmodel.html#endRemoveRows –
Это была ошибка в Qt 5.7.0 , который был исправлен в Qt 5.7.1: https://bugreports.qt.io/browse/QTBUG-54573 - попробуйте обновить. – jpnurmi
@Jesper Juhl QStringListModel - это полный класс, 'removeRow()' реализация уже вызывает эти функции. –