Qt Remote Objects 快速入門

介紹

Qt Remote Objects 模塊提供瞭在進程和設備之間,共享 Qt API 的輕鬆方式。為使這能工作,要求在進程和設備之間的數據通道。要建立這種數據通道,首先需要 QRemoteObjectNode .

在 QtRO,節點是通信端點。在遠程對象網絡,每個參與者 (進程或設備) 都需要自己的節點。QtRO 是具有連接節點為網絡鏈接的點對點網絡。

節點自身並未提供更多用法。但它們帶有值,當添加 QObject 類到節點為共享。那麼,任何對等節點都可以請求共享對象的副本 (或實例) 從 主機節點 ,共享它的節點。

不像使用正常類實例 (具有獨立特性和信號發齣),QtRO 會跨所有副本自動同步改變共享對象。除少數例外外,這些副本擁有如原始對象的同等 Qt API,且意味著可以準確用作原始對象是可用的。

在 QtRO,原始對象的調用者是 Source 。它是完全實現的 C++ 類,采用必要業務邏輯以提供要求功能。這種對象的副本稱為 復本 。不需要為 Replica (復本) 編寫任何 C++ 代碼;取而代之,可從節點請求實例。雖然需要一些代碼纔能使用 Replica 復本 (譬如:把信號連接到自己的槽),但是不需要實現內部行為 – 這已經在源代碼中做到瞭。

因為 Source (源) 可以在不同進程中 (或者甚至可以在不同設備中),所以采用 QtRO 需要考慮一些因素,通常不會遇到當開發時不用 IPC (進程間通信)。具體來說,會發生什麼若進程 (或設備) 不存在?這是復本 API 的附帶補充:

通過 QtRO 共享的對象,所有通信會使用節點之間的鏈接 (導管)。若想要共享 QObject ,必須創建 主機節點 采用 URL (統一資源定位符) 可以連接到其它節點。還可以使用 注冊 促進連接,但節點共享 sources 仍需要是主機節點。各共享對象都會給齣名稱 ( QString ),用於在 QtRO 網絡中標識它。

實現

為闡明遠程對象的使用,在 Source (源) 端需要:

  1. 創建 Source 對象會被復製到其它節點,采用或不用 repc ,Qt Remote Objects 編譯器。
  2. 可選,創建 注冊 。否則,使用直接連接。
  3. 創建主機節點,以便可以共享 Source (源) 對象。
  4. 調用節點的 enableRemoting() 函數以共享 Source (源) 對象。

在 Replica (復本) 側,需要:

  1. 可選,使用 repc 以生成 復本 頭為工程。
  2. 創建節點將連接 Source 主機節點。
  3. 調用節點的 acquire() 函數創建復本指針。

以下範例闡明兩者 repc 編譯的靜態對象和動態 Source (源) 對象。此外,它們還展示瞭直接連接及連接,使用 注冊 在節點之間。