タイムサーバーアプリケーション

接続されたクライアントとタイムオブジェクトを共有するサーバー。

タイムサーバーアプリケーションは、MinuteTimer オブジェクトをインスタンス化し、接続されているすべてのタイムクライアントアプリケーションと共有します。

REPファイルを使用したリモートオブジェクトの定義

この例の親ディレクトリにある REP ファイル "timemodel.rep "は、両方のアプリケーショ ンで使用されるヘッダーファイルを生成するために使用される。このアプリケーションでは、生成された "rep_timemodel_source.h "ファイルが、MinuteTimerSourceMinuteTimer の実装のためにサブクラス化するクラス、およびその他の関連クラスを定義しています。

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のインスタンスの共有

オブジェクトをホストし、それを見つけるためのレジストリを持つために、QRemoteObjectHostQRemoteObjectRegistryHost のインスタンスが作成される。その後、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();
}

プロジェクト例 @ code.qt.io

Time Client Applicationも参照してください

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。