-1
刪除一行時,我有一個ComboBox
在我的QML文件:問題從組合框模型
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);
}
}
難道僅僅是一個錯誤OG ComboBox
還是我做錯了什麼?在配備Sierra 10.12.2的Apple設備上,我的Qt版本爲5.7.0。
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()'實現已經調用了這個函數。 –