2016-12-31 13 views
-1

から行を削除するときに私が持っている私のQMLファイルの中ComboBox発行コンボボックスモデル

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

:システムで現在使用可能なシリアルポート名が含まれてい

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

とモデル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 after removing

はそれだけでバグOG ComboBoxですか私が何か間違ったことをやっていますか?私のQtバージョンは、Sierra 10.12.2を搭載したアップルデバイスで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()'の実現はすでにこの関数を呼び出しています。 –

答えて