Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 简单的文档切换功能?_C++_Qt - Fatal编程技术网

C++ 简单的文档切换功能?

C++ 简单的文档切换功能?,c++,qt,C++,Qt,我正在编写一个应用程序,它允许用户将特定文件拖放到应用程序窗口中,解析这些文件,将内容放入表中(通过QStandardItemModel),并将每个文件的名称(或别名)添加到一个单独的树视图中(充当文档切换器) 我将使用NotePad++作为一个简单的示例 当我单击最左边的“文档切换器”中的任何新文件时,它会在右侧窗格中显示内容。假设右窗格是一张桌子。例如,假设左侧的列表是导入到应用程序中的.csv文件的列表 我要做的是,单击列表中的每个项目后,我希望相应的已解析.csv文件显示在右侧的表窗格

我正在编写一个应用程序,它允许用户将特定文件拖放到应用程序窗口中,解析这些文件,将内容放入表中(通过
QStandardItemModel
),并将每个文件的名称(或别名)添加到一个单独的树视图中(充当文档切换器)

我将使用NotePad++作为一个简单的示例

当我单击最左边的“文档切换器”中的任何新文件时,它会在右侧窗格中显示内容。假设右窗格是一张桌子。例如,假设左侧的列表是导入到应用程序中的.csv文件的列表

我要做的是,单击列表中的每个项目后,我希望相应的已解析.csv文件显示在右侧的表窗格中

我的表格只是一个
QTableView
,它在
QStandardItemModel
中显示.csv文件的内容。当涉及到实现表和解析文件时,一切都是有效的

我还设置了一个
QTreeWidget
作为“文档切换器”。现在,我需要将文档切换器选择链接到表,以便每个文件的各自内容都将显示在表视图中

QTreeView
的顶级项目选择发生变化时,我可以让应用程序用模型内容填充
tableView
。没问题。问题在于我应该在选择更改时检查什么以及如何更改


我不确定如何实现这一点。如何存储一堆
QStandardItemModel
对象,然后将它们链接到文档切换器中的名称?我应该这样做吗?是否必须为导入的每个文件创建一个新的
QStandardItemModel
?我是否应该创建一个
QStandardItemModel
,然后以某种方式保存它以备以后重新提取,并为添加的每个文件重新使用相同的表模型对象?我只是不确定这是如何工作的,我觉得我错过了这一切的一个基本部分。

我建议两种方法来解决你的问题:

  • 您可以查看文档切换器信号(选择已更改),并为当前选择的数据创建新模型。设置模型时,右侧的表视图应显示数据。选择新文件项后,删除现有模型并使用新数据创建新模型
  • 与第一种方法相同,但不是为每次数据更改重新创建模型,而是可以使用单个模型,但在每次切换文件时重置其数据

您不需要“一堆QStandardItemModel对象”。当需要显示CSV文件时,解析CSV文件并不难。检查我在单击列表项(“文档切换器”)上的位置每次需要显示时,我都在加载和解析HTML文件(比CSV更复杂)。我可以查看文档切换器信号(选择已更改),并为当前数据创建新模型。设置模型时,右侧的表视图应显示数据。选择“新建文件”项目后,删除现有模型并使用新数据创建新模型。否则,您可以使用单个模型,但每次切换文件时都会重置其数据。谢谢@vahancho。最后,我使用了您的第二个建议:使用单个模型,每次在我的文件列表中发出
selectionChanged
信号时,都重置并重新填充数据。如果你加上你的评论作为回答,我会接受的。非常感谢。