タイムサーバーアプリケーション
接続されたクライアントとタイムオブジェクトを共有するサーバー。
タイムサーバーアプリケーションは、MinuteTimer
オブジェクトをインスタンス化し、接続されているすべてのタイムクライアントアプリケーションと共有します。
REPファイルを使用したリモートオブジェクトの定義
この例の親ディレクトリにある REP ファイル "timemodel.rep "は、両方のアプリケーショ ンで使用されるヘッダーファイルを生成するために使用される。このアプリケーションでは、生成された "rep_timemodel_source.h "ファイルが、MinuteTimerSource
、MinuteTimer
の実装のためにサブクラス化するクラス、およびその他の関連クラスを定義しています。
TimeModel クラス
timemodel.hとtimemodel.cppのTimeModel
クラスは、共有する時間オブジェクトを実装します。timerEvent
メンバ関数を呼び出すことで、時刻が更新されるようにQBasicTimer
。
void MinuteTimer::timerEvent(QTimerEvent *) { QTime now = QTime::currentTime(); if (now.second() == 59 && now.minute() == time.minute() && now.hour() == time.hour()) { // just missed time tick over, force it, wait extra 0.5 seconds time = time.addSecs(60); timer.start(60500, this); } else { time = now; timer.start(60000-time.second()*1000, this); } qDebug()<<"Time"<<time; setHour(time.hour()); setMinute(time.minute()); emit timeChanged(); }
TimeModelのインスタンスの共有
オブジェクトをホストし、それを見つけるためのレジストリを持つために、QRemoteObjectHost
とQRemoteObjectRegistryHost
のインスタンスが作成される。その後、MinuteTimer
オブジェクトが作成され、QRemoteObjectRegistryHost
オブジェクトのenableRemoting
メンバー関数を使用して共有されます。
int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); #if defined(Q_OS_UNIX) || defined(Q_OS_LINUX) || defined(Q_OS_QNX) signal(SIGINT, &unix_handler); #elif defined(Q_OS_WIN32) SetConsoleCtrlHandler((PHANDLER_ROUTINE)WinHandler, TRUE); #endif QRemoteObjectHost node(QUrl(QStringLiteral("local:replica")),QUrl(QStringLiteral("local:registry"))); QRemoteObjectRegistryHost node2(QUrl(QStringLiteral("local:registry"))); MinuteTimer timer; node2.enableRemoting(&timer); Q_UNUSED(timer) return app.exec(); }
Time Client Applicationも参照してください 。
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。