diff options
| author | Thomas Vanbesien <tvanbesi@proton.me> | 2026-02-24 18:23:32 +0100 |
|---|---|---|
| committer | Thomas Vanbesien <tvanbesi@proton.me> | 2026-02-25 10:12:36 +0100 |
| commit | 38e3a2e587796df133f50363e65a68ec7989cb9b (patch) | |
| tree | aa0642e4f82ee0ba9a88ef8a0e56c527a643e0c7 /main.cpp | |
| download | BobinkQtOpcUaAppTemplate-38e3a2e587796df133f50363e65a68ec7989cb9b.tar.gz BobinkQtOpcUaAppTemplate-38e3a2e587796df133f50363e65a68ec7989cb9b.zip | |
Initial commit: BobinkQtOpcUa app template with demo UI
Qt 6 QML application template using BobinkQtOpcUa as a submodule for
OPC UA connectivity. Includes discovery, PKI, auth, node monitoring
with read/write, and a multi-page demo UI.
Diffstat (limited to 'main.cpp')
| -rw-r--r-- | main.cpp | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..aa341ad --- /dev/null +++ b/main.cpp @@ -0,0 +1,84 @@ +/** + * @file main.cpp + * @brief Entry point for the Bobink demo application. + */ +#include <QDateTime> +#include <QGuiApplication> +#include <QQmlApplicationEngine> + +#include <QtQml/QQmlExtensionPlugin> +Q_IMPORT_QML_PLUGIN (BobinkPlugin) + +/** @brief Custom log handler matching open62541 server log format. */ +static void +logHandler (QtMsgType type, const QMessageLogContext &ctx, const QString &msg) +{ + // Color only the type/category tag. + const char *color = ""; + const char *label = "debug"; + switch (type) + { + case QtDebugMsg: + label = "debug"; + break; + case QtInfoMsg: + color = "\x1b[32m"; + label = "info"; + break; + case QtWarningMsg: + color = "\x1b[33m"; + label = "warning"; + break; + case QtCriticalMsg: + color = "\x1b[31m"; + label = "critical"; + break; + case QtFatalMsg: + color = "\x1b[1;31m"; + label = "fatal"; + break; + } + + // Shorten "qt.opcua.plugins.open62541.sdk.client" → "client". + QLatin1StringView cat (ctx.category ? ctx.category : "default"); + qsizetype dot = cat.lastIndexOf (QLatin1Char ('.')); + if (dot >= 0) + cat = cat.sliced (dot + 1); + + // "debug/client", "warning/network", etc. — padded to 20 chars. + QByteArray tag + = QByteArray (label) + '/' + QByteArray (cat.data (), cat.size ()); + + // Format UTC offset as "(UTC+0100)" to match open62541 server logs. + QDateTime now = QDateTime::currentDateTime (); + qint32 offset = now.offsetFromUtc (); + QChar sign = offset >= 0 ? u'+' : u'-'; + offset = qAbs (offset); + QString ts = now.toString (u"yyyy-MM-dd HH:mm:ss.zzz") + + QStringLiteral (" (UTC%1%2%3)") + .arg (sign) + .arg (offset / 3600, 2, 10, QLatin1Char ('0')) + .arg ((offset % 3600) / 60, 2, 10, QLatin1Char ('0')); + + fprintf (stderr, "[%s] %s%-20.*s\x1b[0m %s\n", qPrintable (ts), color, + static_cast<int> (tag.size ()), tag.data (), qPrintable (msg)); +} + +int +main (int argc, char *argv[]) +{ + // Load the locally-built OpcUa backend plugin (open62541). + QCoreApplication::addLibraryPath (QStringLiteral (QTOPCUA_PLUGIN_PATH)); + + qInstallMessageHandler (logHandler); + + QGuiApplication app (argc, argv); + + QQmlApplicationEngine engine; + QObject::connect ( + &engine, &QQmlApplicationEngine::objectCreationFailed, &app, + [] () { QCoreApplication::exit (1); }, Qt::QueuedConnection); + + engine.loadFromModule ("BobinkQtOpcUaAppTemplate", "Main"); + return app.exec (); +} |
