我正在开发基于我的C ++ FTP客户端类(libcURL包装器)的GUI C ++ / Qt FTP(Windows / Ubuntu)客户端。
我使用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中,它们总是出现在发布版本中,而不是出现在调试版本中(我必须逐步调试,以便它们可以在Ubuntu上显示它是相反的:在调试模式下它们总是显示但不在发布中。
如何使用refresh方法()或其他技术刷新QStandardItemModel,就像QDirModel一样?
更新:如果在工作线程堆中动态分配“item”(我在完成后删除),它的堆也会消失吗?
答案 0 :(得分:0)
我通过从QThread向GUI线程发送信号来修复此问题,以执行将项目添加到选定索引的插槽。