2016-12-31 63 views
-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); 

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

難道僅僅是一個錯誤OG ComboBox還是我做錯了什麼?在配備Sierra 10.12.2的Apple設備上,我的Qt版本爲5.7.0。

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()'實現已經調用了這個函數。 –

回答