pingpong example: Modernize the code

Use qWarning()/std::cout instead of C IO functions.

Use default parameters for QDBusInterface's constructor.

Remove useless Q_SCRIPTABLE.

Use type-safe invokeMethod().

Extract a local variable for the used D-Bus connection.

Task-number: QTBUG-111366
Pick-to: 6.5
Change-Id: Idc38a7c1dd97d71308d9491193039744c759d6f2
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
Ievgenii Meshcheriakov 2023-02-22 12:41:05 +01:00
parent 38ee9ee849
commit 07b8a5a409
3 changed files with 22 additions and 24 deletions

View File

@ -8,32 +8,33 @@
#include <QDBusInterface> #include <QDBusInterface>
#include <QDBusReply> #include <QDBusReply>
#include <stdio.h> #include <iostream>
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
QCoreApplication app(argc, argv); QCoreApplication app(argc, argv);
if (!QDBusConnection::sessionBus().isConnected()) { auto connection = QDBusConnection::sessionBus();
fprintf(stderr, "Cannot connect to the D-Bus session bus.\n"
"To start it, run:\n" if (!connection.isConnected()) {
"\teval `dbus-launch --auto-syntax`\n"); qWarning("Cannot connect to the D-Bus session bus.\n"
"To start it, run:\n"
"\teval `dbus-launch --auto-syntax`\n");
return 1; return 1;
} }
QDBusInterface iface(SERVICE_NAME, "/", "", QDBusConnection::sessionBus()); QDBusInterface iface(SERVICE_NAME, "/");
if (iface.isValid()) { if (iface.isValid()) {
QDBusReply<QString> reply = iface.call("ping", argc > 1 ? argv[1] : ""); QDBusReply<QString> reply = iface.call("ping", argc > 1 ? argv[1] : "");
if (reply.isValid()) { if (reply.isValid()) {
printf("Reply was: %s\n", qPrintable(reply.value())); std::cout << "Reply was: " << qPrintable(reply.value()) << std::endl;
return 0; return 0;
} }
fprintf(stderr, "Call failed: %s\n", qPrintable(reply.error().message())); qWarning("Call failed: %s\n", qPrintable(reply.error().message()));
return 1; return 1;
} }
fprintf(stderr, "%s\n", qWarning("%s\n", qPrintable(connection.lastError().message()));
qPrintable(QDBusConnection::sessionBus().lastError().message()));
return 1; return 1;
} }

View File

@ -7,14 +7,10 @@
#include <QCoreApplication> #include <QCoreApplication>
#include <QDBusConnection> #include <QDBusConnection>
#include <QDBusError> #include <QDBusError>
#include <QTimer>
#include <stdio.h>
#include <stdlib.h>
QString Pong::ping(const QString &arg) QString Pong::ping(const QString &arg)
{ {
QMetaObject::invokeMethod(QCoreApplication::instance(), "quit"); QMetaObject::invokeMethod(QCoreApplication::instance(), &QCoreApplication::quit);
return QString("ping(\"%1\") got called").arg(arg); return QString("ping(\"%1\") got called").arg(arg);
} }
@ -22,21 +18,22 @@ int main(int argc, char **argv)
{ {
QCoreApplication app(argc, argv); QCoreApplication app(argc, argv);
if (!QDBusConnection::sessionBus().isConnected()) { auto connection = QDBusConnection::sessionBus();
fprintf(stderr, "Cannot connect to the D-Bus session bus.\n"
"To start it, run:\n" if (!connection.isConnected()) {
"\teval `dbus-launch --auto-syntax`\n"); qWarning("Cannot connect to the D-Bus session bus.\n"
"To start it, run:\n"
"\teval `dbus-launch --auto-syntax`\n");
return 1; return 1;
} }
if (!QDBusConnection::sessionBus().registerService(SERVICE_NAME)) { if (!connection.registerService(SERVICE_NAME)) {
fprintf(stderr, "%s\n", qWarning("%s\n", qPrintable(connection.lastError().message()));
qPrintable(QDBusConnection::sessionBus().lastError().message()));
exit(1); exit(1);
} }
Pong pong; Pong pong;
QDBusConnection::sessionBus().registerObject("/", &pong, QDBusConnection::ExportAllSlots); connection.registerObject("/", &pong, QDBusConnection::ExportAllSlots);
app.exec(); app.exec();
return 0; return 0;

View File

@ -10,7 +10,7 @@ class Pong: public QObject
{ {
Q_OBJECT Q_OBJECT
public slots: public slots:
Q_SCRIPTABLE QString ping(const QString &arg); QString ping(const QString &arg);
}; };
#endif #endif