私はC++ FTPクライアントクラス(libcURLラッパー)に基づいてGUI C++/Qt FTP(Windows/Ubuntu)クライアントを開発しています。QStandardItemModelは常にQTreeViewを更新していません
QTreeViewを使用して、リモートFTPフォルダ/ファイルを表示します。ユーザーがサブディレクトリをクリックすると、私が選択したディレクトリのインデックスを取り戻すと私はそれに項目を追加します。
QStandardItemModel* m_DistantModel; // from GUI thread class
QModelIndex* m_SelectedIndex; // from FTPThread class
const MzFTP* m_pOwner; // from FTPThread class
//....
QStandardItem* item;
QStandardItem* itemParent;
//....
item = new QStandardItem(QIcon(QStringLiteral(":/icons/file.png")),QString::fromStdString(itFTPItem));
itemParent = m_pOwner->m_DistantModel->itemFromIndex(*m_SelectedIndex);
itemParent->appendRow(item);
、選択した要素(itemParent)に追加された行は、常にQTreeViewに表示されません。 Windowsでは、それらは常にリリースビルドに表示されますが、デバッグのものではありません(私は一歩一歩デバッグしなければならないので表示できます)。これは逆です:デバッグモードでは常に表示されますが、リリースには表示されません。
QStandardItemModelをrefreshメソッド()や別のテクニックでQDirModelと同様に更新するにはどうすればよいですか?
更新:「アイテム」がワーカースレッドヒープに動的に割り当てられている(終了後に削除する)場合、そのヒープも消えますか?
あなたの質問を正しく理解したかどうか分かりませんが、モデルの信号を見てください。 無効\t rowsAboutToBeInserted(のconst QModelIndex&親、int型開始、int型エンド) 無効\t rowsInserted(のconst QModelIndex&親、int型開始、int型エンド) http://doc.qt.io/qt- 4.8/qabstractitemmodel.html#signals – frbaresi
信号を 'QStandardItemModel'と' QTreeView'(またはあなたが使っているもの)の間に正しく接続しましたか? – Holt
GUIクラスのコンストラクタでモデルをViewに結びつけているので、シグナルを扱う必要はありません:ui-> uiTreeDistantFolder-> setModel(m_DistantModel); – Aminos