模型之间的沟通

时间:2015-06-23 15:45:37

标签: 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;
  Value getValue (ValueType type) const;

private:
  RawData data;
}

我在

中加载记录
QVector<Record> records;

Byte View是一个十六进制字节的简单表(行号,列 - 字节位置)。十进制视图也是一个表(行号,一列 - 值)。

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

1 个答案:

答案 0 :(得分:2)

当您使用Qt时,通常最好将Qt自己的模型之一进行子类化。这样,您将免费获得大量视图小部件,同时遵循与您使用的其他工具包相同的标准,使您的代码更加一致。 Qt's documentation有一些指导说明您必须实施哪些方法/信号/插槽。

要查看的一些课程:QAbstractItemModelQAbstractTableModelQAbstractListModel

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

在您的具体情况下,我将继承QAbstractTableModel,并将您的记录包装在此类中。