我想了解模型和數據之間應該有什麼樣的關係。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