Auf dieser Seite

Zeitserver-Anwendung

Ein Server, der ein Zeitobjekt mit verbundenen Clients teilt.

Die Zeitserver-Anwendung instanziiert ein „ MinuteTimer “-Objekt und stellt es allen verbundenen Zeit-Client-Anwendungen zur Verfügung.

Terminal, auf dem „remoteobjects_server“ läuft und die aktuelle Uhrzeit angezeigt wird

Definition von Remote-Objekten mithilfe einer REP-Datei

Die REP-Datei „timemodel.rep“ im übergeordneten Verzeichnis des Beispiels wird verwendet, um die von beiden Anwendungen genutzten Header-Dateien zu generieren. Für diese Anwendung definiert die generierte Datei „rep_timemodel_source.h“ die Klasse ` MinuteTimerSource`, die Klasse, von der für die Implementierung von ` MinuteTimer` abgeleitet werden muss, sowie weitere zugehörige Klassen.

Die Klasse „TimeModel“

Die Klasse „ TimeModel “ in „timemodel.h“ und „timemodel.cpp“ implementiert das gemeinsam genutzte Zeitobjekt. Sie verwendet ein „ QBasicTimer “, um sicherzustellen, dass die Zeit durch den Aufruf der Memberfunktion „ timerEvent “ aktualisiert wird.

void MinuteTimer::timerEvent(QTimerEvent*)
{
    QTime now = QTime::currentTime();
    if (now.second()== 59&& now.minute()== time.minute()&& now.hour()== time.hour()) {
        // Der Zeit-Tick wurde knapp verpasst, erzwinge ihn, warte zusätzlich 0,5 Sekunden
        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();
}

Eine Instanz von `TimeModel` freigeben

Instanzen von „ QRemoteObjectHost “ und „ QRemoteObjectRegistryHost “ werden erstellt, um ein Objekt zu hosten und über eine Registrierung zu verfügen, über die es gefunden werden kann. Anschließend wird ein „ MinuteTimer “-Objekt erstellt und mithilfe der Member-Funktion „ enableRemoting “ des „ QRemoteObjectRegistryHost “-Objekts freigegeben.

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();
}

Beispielprojekt @ code.qt.io

Siehe auch „Time Client Application“.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.