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
等。