2017-09-22 9 views
1

私はQtのModel-ViewをAddressBookの例で学習しています。 https://doc.qt.io/qt-5/qtwidgets-itemviews-addressbook-example.html そして私は面白い何かを見つける。このコードは、QAbstractTableModelで使用されるTableModelクラスを構築します。オーバーライドsetData関数では、dataChangedシグナルを送出します。しかし、removeRows/insertRowsにはシグナルは送出されません。次に、どのようにこれらの機能がビューを更新することができます。機能のQtシグナルがアドレス帳に出力されます

bool TableModel::removeRows(int position, int rows, const QModelIndex &index) 
    { 
    Q_UNUSED(index); 
    beginRemoveRows(QModelIndex(), position, position + rows - 1); 

    for (int row = 0; row < rows; ++row) { 
     listOfPairs.removeAt(position); 
    } 

    endRemoveRows(); 
    return true; 
    } 

bool TableModel::setData(const QModelIndex &index, const QVariant &value, int role) 
{ 
    if (index.isValid() && role == Qt::EditRole) { 
     int row = index.row(); 

     QPair<QString, QString> p = listOfPairs.value(row); 

     if (index.column() == 0) 
      p.first = value.toString(); 
     else if (index.column() == 1) 
      p.second = value.toString(); 
     else 
      return false; 

     listOfPairs.replace(row, p); 
     emit(dataChanged(index, index)); 

     return true; 
    } 

    return false; 
} 

答えて

2

メイク・ノートでは、あなたの投稿コードの機能removeRows()beginRemoveRows()endRemoveRows()を呼び出します。

beginRemoveRows()

機能、信号rowsAboutToBeRemoved()を発します。これは、接続されたビューが削除について知ることができる方法で、データが削除される前に基本の接続ビューが処理する必要があります。

は、以下のドキュメントに注釈を見て:

https://doc.qt.io/qt-5/qabstractitemmodel.html#beginRemoveRows

+0

ありがとうございました。私はちょうど新しい質問を投稿します、あなたは私を助けることができますか? https://stackoverflow.com/questions/46375673/how-can-realize-my-own-memory-viewer-by-qt –

関連する問題