Sur cette page

Application de serveur de temps

Un serveur qui partage un objet de temps avec les clients connectés.

L'application serveur de temps instancie un objet ` MinuteTimer ` et le partage avec toutes les applications clientes de temps connectées.

Terminal exécutant remoteobjects_server et affichant l'heure actuelle

Définition d’objets distants à l’aide d’un fichier REP

Le fichier REP « timemodel.rep », situé dans le répertoire parent de l'exemple, sert à générer les fichiers d'en-tête utilisés par les deux applications. Pour cette application, le fichier « rep_timemodel_source.h » généré définit MinuteTimerSource, la classe à sous-classer pour l'implémentation de MinuteTimer, ainsi que d'autres classes associées.

La classe TimeModel

La classe ` TimeModel `, définie dans les fichiers `timemodel.h` et `timemodel.cpp`, implémente l’objet temporel à partager. Elle utilise une classe ` QBasicTimer ` pour garantir que l’heure est mise à jour en appelant la fonction membre ` timerEvent `.

void MinuteTimer::timerEvent(QTimerEvent*)
{
    QTime now = QTime::currentTime();
    if (now.second()== 59&& now.minute()== time.minute()&& now.hour()== time.hour()) {
        // le passage à la seconde suivante vient d’être manqué de peu, forçons-le, attendons 0,5 seconde supplémentaire
        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();
}

Partage d’une instance de TimeModel

Des instances de ` QRemoteObjectHost ` et de ` QRemoteObjectRegistryHost ` sont créées pour héberger un objet et disposer d’un registre permettant de le retrouver. Un objet ` MinuteTimer ` est ensuite créé et partagé à l’aide de la fonction membre ` enableRemoting ` de l’objet ` QRemoteObjectRegistryHost `.

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

Exemple de projet sur code.qt.io

Voir également l’application client Time.

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