Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
Qt 模型间的通信_Qt_Oop_Design Patterns_Model View Controller_Model - Fatal编程技术网

Qt 模型间的通信

Qt 模型间的通信,qt,oop,design-patterns,model-view-controller,model,Qt,Oop,Design Patterns,Model View Controller,Model,我的程序以原始格式从文件加载记录(每行一条) 我有一些以不同方式显示此数据的视图: 字节视图 十进制视图(通过使用字节范围进行一些计算) 两个视图都必须提供编辑值的功能 下面是一些代码: class Record { public: void setByte (int position, Byte byte); void setValue (ValueType type, Value value); Byte getByte (int position) const; Va

我的程序以原始格式从文件加载记录(每行一条)

我有一些以不同方式显示此数据的视图:

  • 字节视图
  • 十进制视图(通过使用字节范围进行一些计算)
两个视图都必须提供编辑值的功能

下面是一些代码:

class Record
{
public:
  void setByte (int position, Byte byte);
  void setValue (ValueType type, Value value);

  Byte getByte (int position) const;
  Value getValue (ValueType type) const;

private:
  RawData data;
}
我正在把唱片装进去

QVector<Record> records;
QVector记录;
字节视图是一个包含十六进制字节(行-行编号,列-字节位置)的简单表格。Decimal视图也是一个表(行-行号,一列-值)


那么,为我的视图设计具有相互通信能力的模型的最佳方法是什么(例如,当从其中一个视图修改数据时发送信号)?

当您使用Qt时,通常最好将Qt自己的模型子类化。通过这种方式,您将免费获得许多视图小部件,同时通过遵循与您使用的其他工具包相同的标准,使您的代码更加一致。制定一些指导方针,说明必须实施哪些方法/信号/插槽

要查看的一些类:,以及

对于视图方面,您应该更喜欢使用Qt提供的小部件,如果需要,可以实现一个来更改它的外观


在您的特定情况下,我会将QAbstractTableModel子类化,并将您的记录封装在这个类中。

谢谢您的回答,但我需要更通用的解决方案,如UML草图(我指的是类图表)或类似的smth。@SandyEmerald请更新您的问题,以反映您真正想要的内容。您提出的记录甚至没有Qt的模型那么一般。您可以很容易地在Qt模型中表示记录表树。到目前为止,我不明白你为什么需要一个“更一般”的解决方案。你的数据结构不能用树来表示吗?@KubaOber问题的意思是,当我在任何视图中编辑某些值时,如何设计我的模型来相互通信?我的意思是,我有一个数据源(记录的向量)和不同的方式来更改数据(通过编辑十六进制或十进制值)。那么我的模型应该是什么呢?我的答案涵盖了你所说的一切。如果将Qt视图与代理组合在一起,则可以以任何方式显示/编辑Qt模型中的数据need@sandyEmerald子类
qabstracttemmodel
或者更容易
QAbstractListModel
或者
QAbstractTableModel
。看见然后实现视图,以便它们对模型的信号做出适当的反应,或者重用现有视图,如
QTreeView
等。