2016-12-19 10 views
-1

私は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と同様に更新するにはどうすればよいですか?

更新:「アイテム」がワーカースレッドヒープに動的に割り当てられている(終了後に削除する)場合、そのヒープも消えますか?

+0

あなたの質問を正しく理解したかどうか分かりませんが、モデルの信号を見てください。 無効\t rowsAboutToBeInserted(のconst QModelIndex&親、int型開始、int型エンド) 無効\t rowsInserted(のconst QModelIndex&親、int型開始、int型エンド) http://doc.qt.io/qt- 4.8/qabstractitemmodel.html#signals – frbaresi

+0

信号を 'QStandardItemModel'と' QTreeView'(またはあなたが使っているもの)の間に正しく接続しましたか? – Holt

+0

GUIクラスのコンストラクタでモデルをViewに結びつけているので、シグナルを扱う必要はありません:ui-> uiTreeDistantFolder-> setModel(m_DistantModel); – Aminos

答えて

0

QThreadからGUIスレッドに信号を送信して、選択したインデックスに項目を追加するスロットを実行することで問題を解決しました。

関連する問題