Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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++ 手动添加/删除QabstracteModel中的行是否是错误的设计?_C++_Qt_Qabstractitemmodel - Fatal编程技术网

C++ 手动添加/删除QabstracteModel中的行是否是错误的设计?

C++ 手动添加/删除QabstracteModel中的行是否是错误的设计?,c++,qt,qabstractitemmodel,C++,Qt,Qabstractitemmodel,我有一个从QabstracteModel继承的类,我用它来表示树数据结构。作为我设计的一部分,在一些实例中,树的一部分中的用户交互将导致在模型的另一部分(可能是较远的部分)中添加/删除行。我通过节点之间的直接通信来实现这一点。也就是说,在这种情况下不调用QabstracteModel::insertRows和removeRows。这给正确刷新模型视图带来了一些挑战,我怀疑QabstracteModel类在设计时并没有真正考虑到这种行为。这可能是个糟糕的设计吗?我是否应该仅通过Qabstracte

我有一个从QabstracteModel继承的类,我用它来表示树数据结构。作为我设计的一部分,在一些实例中,树的一部分中的用户交互将导致在模型的另一部分(可能是较远的部分)中添加/删除行。我通过节点之间的直接通信来实现这一点。也就是说,在这种情况下不调用QabstracteModel::insertRows和removeRows。这给正确刷新模型视图带来了一些挑战,我怀疑QabstracteModel类在设计时并没有真正考虑到这种行为。这可能是个糟糕的设计吗?我是否应该仅通过QabstracteModel的内置成员函数添加/删除节点?

是否手动触发所有信号?在某种程度上,您可以通过模拟来测试这一点。让一个玩具视图连接到QabstracteModel暴露的每个信号,并记录发生的事情。使用玩具QabstracteModel,删除一些行,记录发生的情况。现在,将玩具视图挂接到真正的QabstracteModel上,并让它通过日志记录操作行。日志是相似的,还是不同的?我在手动插入/删除时不会发出任何信号;我刚刚使我的节点类成为我模型的一个friend类,因此我可以调用它的受保护成员函数,如beginInsertRows等。我应该如何处理从您的方法中获得的日志数据?我应该手动发出自定义模型类中没有显示的信号吗?是的。或者阅读模型视图。视图依赖于信号或类似信息来反映模型的更改。