从 ComboBox 模型中删除行时出现问题
Issue when removing row from ComboBox model
我的 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
删除了这个带有一些视觉问题的端口:
这只是一个错误 og ComboBox
还是我做错了什么?在装有 Sierra 10.12.2 的 Apple 设备上,我的 Qt 版本是 5.7.0。
Here 一个重现问题的简单项目。
这是 Qt 5.7.0 错误 (bugreports.qt.io/browse/QTBUG-54573)。升级到 Qt 5.7.1 id 解决了这个问题。
我的 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
删除了这个带有一些视觉问题的端口:
这只是一个错误 og ComboBox
还是我做错了什么?在装有 Sierra 10.12.2 的 Apple 设备上,我的 Qt 版本是 5.7.0。
Here 一个重现问题的简单项目。
这是 Qt 5.7.0 错误 (bugreports.qt.io/browse/QTBUG-54573)。升级到 Qt 5.7.1 id 解决了这个问题。