我想了解模型和数据之间应该有什么样的关系。Qt模型查看模式,用于连接模型和数据的设计选择
对于我目前的状况,我有一个QTcpServer既可这使主动套接字的列表。
class TftpServer : public QTcpServer
{
Q_OBJECT
public:
TftpServer(QObject *parent = 0)
:QTcpServer(parent) {}
QList<QTcpSocket *> m_activeSockets;
的数据模型应该代表的视图是QList<QTcpSocket *> m_activeSockets;
我觉得这样做是为了防止重复数据的任何费用,就能导致矛盾的正确途径。意思是在任何时候View都应该代表真实状态数据。
我已经尝试了一些方法,没有成功,因为我有限的时间,我可以花费测试每种方法。
途径:
TftpServer::m_activeSockets
私人,模型可以访问它通过getter和setter。
- 缺陷:如何在模型中调用方法
TftpServer::m_activeSockets
?
2.
型号友元类的TftpServer
。直接访问TftpServer::m_activeSockets
。
- 无法执行。
TftpServer::m_activeSockets
公众。型号有公共参考
QList<QTcpSocket *> & m_activeSockets;
到TftpServer::m_activeSockets
。
- 缺陷:公开可用的
我想找出最佳的解决方案(随时提出)被认为是最佳的敏感数据。
和听到,如果他们不坚持单一数据源的优点(在这种情况下,模型将只拥有TftpServer::m_activeSockets
副本作为其上的更改参数和同步与它)。
你(你的模型)需要从'QList'知道些什么?尺寸?还有什么? –
vahancho
@vahancho它将不得不从列表中访问项目('QTcpSocket *')及其方法。例如,如果有人在View中点击那个项目,他应该在GUI中的某个地方打印出'QTcpSocket :: peerName()'。 – TheMeaningfulEngineer
那么,如果你不想暴露敏感数据(在你的列表中的第3点)而不是在'TftpServer'类中实现包装函数,比如'QString TftpServer :: peerName(int)'等等。模型根本不会处理QTcpSocket对象。 – vahancho