首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Qt模型视图模式,模型与数据连接的设计选择

Qt模型视图模式,模型与数据连接的设计选择
EN

Stack Overflow用户
提问于 2013-10-31 11:00:16
回答 1查看 229关注 0票数 0

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

对于我目前的情况,我有一个QTcpServer,它保存一个活动套接字列表。

代码语言:javascript
运行
复制
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的副本作为其参数,并在更改时与其同步)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-31 21:06:48

您滥用了Qt的模型视图体系结构--没有必要传递实际的套接字。您想要的是建立一个连接列表的模型,所以只需实现它。连接有一些参数--这些参数可以映射到模型的列,也可以映射为子行,每个连接都是树中的父项,这取决于哪种方法更方便。模型应该提供的数据在可视化方面必须是有意义的。除非您要创建您自己的自定义视图或委托,否则QTcpSocket是无法可视化的。可以可视化的东西是数字、字符串等。

您要做的是重复使用QTcpSocket作为一个结构,并使用一些访问器方法来返回主机名、端口等。你这样滥用是不会节省时间的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19704680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档