Zeitserver-Anwendung

Ein Server, der ein Zeitobjekt mit den angeschlossenen Clients teilt.

Die Zeitserver-Anwendung instanziiert ein MinuteTimer Objekt und teilt es mit allen angeschlossenen Zeit-Client-Anwendungen.

Definition von Remote-Objekten mit einer REP-Datei

Die REP-Datei "timemodel.rep" im übergeordneten Verzeichnis des Beispiels wird verwendet, um die von beiden Anwendungen verwendeten Header-Dateien zu erzeugen. Für diese Anwendung definiert die generierte Datei "rep_timemodel_source.h" MinuteTimerSource, die Klasse, die als Unterklasse für die Implementierung von MinuteTimer dient, und andere verwandte Klassen.

Die TimeModel-Klasse

Die Klasse TimeModel in timemodel.h und timemodel.cpp implementiert das gemeinsam zu nutzende Zeitobjekt. Sie verwendet eine QBasicTimer, um sicherzustellen, dass die Zeit durch den Aufruf der Mitgliedsfunktion timerEvent aktualisiert wird.

void MinuteTimer::timerEvent(QTimerEvent *) { QTime now = QTime::currentTime(); if (now.second() == 59 && now.minute() == time.minute() && now.hour() == time.hour()) { // gerade verpasste Zeitüberschreitung, erzwingen, zusätzliche 0,5 Sekunden wartentime = 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(); }

Gemeinsame Nutzung einer Instanz von TimeModel

Es werden Instanzen von QRemoteObjectHost und QRemoteObjectRegistryHost erstellt, um ein Objekt zu hosten und eine Registry zu haben, um es zu finden. Anschließend wird ein MinuteTimer Objekt erstellt, das mit Hilfe der enableRemoting Memberfunktion des QRemoteObjectRegistryHost Objekts gemeinsam genutzt wird.

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.

© 2025 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.