我试图理解模型和数据之间的关系。

对于我目前的情况,我有一个QTcpServer,它保存一个活动套接字列表。
class TftpServer : public QTcpServer
{
Q_OBJECT
public:
TftpServer(QObject *parent = 0)
:QTcpServer(parent) {}
QList<QTcpSocket *> m_activeSockets;模型应该向视图表示的数据是QList<QTcpSocket *> m_activeSockets;
我觉得这样做的正确方法是不惜任何代价防止数据重复,因为这可能导致不一致。这意味着任何时候View都应该表示真实的状态数据。
我尝试过一些方法,但没有成功,因为我有有限的时间来测试每一种方法。
方法:
1.
TftpServer::m_activeSockets私有,模型通过getter和setter访问它。
TftpServer::m_activeSockets调用方法?2.
TftpServer的模范朋友类。直接访问TftpServer::m_activeSockets。
3.
TftpServer::m_activeSockets公众。模型有一个公共参考
QList<QTcpSocket *> & m_activeSockets;到TftpServer::m_activeSockets。
我想找出一个最优的解决方案(随意建议)被认为是最佳的。
并了解它们是否支持不坚持单一数据源(在这种情况下,模型只需将TftpServer::m_activeSockets的副本作为其参数,并在更改时与其同步)。
发布于 2013-10-31 21:06:48
您滥用了Qt的模型视图体系结构--没有必要传递实际的套接字。您想要的是建立一个连接列表的模型,所以只需实现它。连接有一些参数--这些参数可以映射到模型的列,也可以映射为子行,每个连接都是树中的父项,这取决于哪种方法更方便。模型应该提供的数据在可视化方面必须是有意义的。除非您要创建您自己的自定义视图或委托,否则QTcpSocket是无法可视化的。可以可视化的东西是数字、字符串等。
您要做的是重复使用QTcpSocket作为一个结构,并使用一些访问器方法来返回主机名、端口等。你这样滥用是不会节省时间的。
https://stackoverflow.com/questions/19704680
复制相似问题