complexpingpong example: Modernize the code
Use C++ IO streams and qWarning() instead of (f)printf() for console IO. Make user-visible strings translatable. Use invokeMethod() instead of QTimer. Fixes: QTBUG-111366 Pick-to: 6.5 Change-Id: I6990b964c2097267e04cd361b9cd8fc0a22a0135 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
parent
21a6c86979
commit
7b9e7f8002
@ -5,54 +5,58 @@
|
|||||||
#include "complexping.h"
|
#include "complexping.h"
|
||||||
|
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
|
#include <QDBusInterface>
|
||||||
#include <QDBusReply>
|
#include <QDBusReply>
|
||||||
#include <QDBusServiceWatcher>
|
#include <QDBusServiceWatcher>
|
||||||
#include <QFile>
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
void Ping::start(const QString &name)
|
void Ping::start(const QString &name)
|
||||||
{
|
{
|
||||||
if (name != SERVICE_NAME)
|
if (name != SERVICE_NAME)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// open stdin for reading
|
auto connection = QDBusConnection::sessionBus();
|
||||||
qstdin.open(stdin, QIODevice::ReadOnly);
|
|
||||||
|
|
||||||
// find our remote
|
// find our remote
|
||||||
iface = new QDBusInterface(SERVICE_NAME, "/", "org.example.QtDBus.ComplexPong.Pong",
|
auto iface = new QDBusInterface(SERVICE_NAME, "/", "org.example.QtDBus.ComplexPong.Pong",
|
||||||
QDBusConnection::sessionBus(), this);
|
connection, this);
|
||||||
if (!iface->isValid()) {
|
if (!iface->isValid()) {
|
||||||
fprintf(stderr, "%s\n",
|
qWarning().noquote() << connection.lastError().message();
|
||||||
qPrintable(QDBusConnection::sessionBus().lastError().message()));
|
|
||||||
QCoreApplication::instance()->quit();
|
QCoreApplication::instance()->quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
connect(iface, SIGNAL(aboutToQuit()), QCoreApplication::instance(), SLOT(quit()));
|
connect(iface, SIGNAL(aboutToQuit()), QCoreApplication::instance(), SLOT(quit()));
|
||||||
|
|
||||||
while (true) {
|
std::string s;
|
||||||
printf("Ask your question: ");
|
|
||||||
|
while (true) {
|
||||||
|
std::cout << qPrintable(tr("Ask your question: ")) << std::flush;
|
||||||
|
|
||||||
|
std::getline(std::cin, s);
|
||||||
|
auto line = QString::fromStdString(s).trimmed();
|
||||||
|
|
||||||
QString line = QString::fromLocal8Bit(qstdin.readLine()).trimmed();
|
|
||||||
if (line.isEmpty()) {
|
if (line.isEmpty()) {
|
||||||
iface->call("quit");
|
iface->call("quit");
|
||||||
return;
|
return;
|
||||||
} else if (line == "value") {
|
} else if (line == "value") {
|
||||||
QVariant reply = iface->property("value");
|
QVariant reply = iface->property("value");
|
||||||
if (!reply.isNull())
|
if (!reply.isNull())
|
||||||
printf("value = %s\n", qPrintable(reply.toString()));
|
std::cout << "value = " << qPrintable(reply.toString()) << std::endl;
|
||||||
} else if (line.startsWith("value=")) {
|
} else if (line.startsWith("value=")) {
|
||||||
iface->setProperty("value", line.mid(6));
|
iface->setProperty("value", line.mid(6));
|
||||||
} else {
|
} else {
|
||||||
QDBusReply<QDBusVariant> reply = iface->call("query", line);
|
QDBusReply<QDBusVariant> reply = iface->call("query", line);
|
||||||
if (reply.isValid())
|
if (reply.isValid()) {
|
||||||
printf("Reply was: %s\n", qPrintable(reply.value().variant().toString()));
|
std::cout << qPrintable(tr("Reply was: %1").arg(reply.value().variant().toString()))
|
||||||
|
<< std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iface->lastError().isValid())
|
if (iface->lastError().isValid())
|
||||||
fprintf(stderr, "Call failed: %s\n", qPrintable(iface->lastError().message()));
|
qWarning().noquote() << tr("Call failed: %1").arg(iface->lastError().message());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,9 +65,11 @@ int main(int argc, char **argv)
|
|||||||
QCoreApplication app(argc, argv);
|
QCoreApplication app(argc, argv);
|
||||||
|
|
||||||
if (!QDBusConnection::sessionBus().isConnected()) {
|
if (!QDBusConnection::sessionBus().isConnected()) {
|
||||||
fprintf(stderr, "Cannot connect to the D-Bus session bus.\n"
|
qWarning().noquote() << QCoreApplication::translate(
|
||||||
|
"complexping",
|
||||||
|
"Cannot connect to the D-Bus session bus.\n"
|
||||||
"To start it, run:\n"
|
"To start it, run:\n"
|
||||||
"\teval `dbus-launch --auto-syntax`\n");
|
"\teval `dbus-launch --auto-syntax`");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,17 +5,12 @@
|
|||||||
#define COMPLEXPING_H
|
#define COMPLEXPING_H
|
||||||
|
|
||||||
#include <QtCore/QObject>
|
#include <QtCore/QObject>
|
||||||
#include <QtCore/QFile>
|
|
||||||
#include <QtDBus/QDBusInterface>
|
|
||||||
|
|
||||||
class Ping: public QObject
|
class Ping : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public slots:
|
public slots:
|
||||||
void start(const QString &);
|
void start(const QString &name);
|
||||||
public:
|
|
||||||
QFile qstdin;
|
|
||||||
QDBusInterface *iface;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -7,12 +7,8 @@
|
|||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QDBusConnection>
|
#include <QDBusConnection>
|
||||||
#include <QDBusError>
|
#include <QDBusError>
|
||||||
#include <QTimer>
|
#include <QDebug>
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
// the property
|
|
||||||
QString Pong::value() const
|
QString Pong::value() const
|
||||||
{
|
{
|
||||||
return m_value;
|
return m_value;
|
||||||
@ -25,7 +21,8 @@ void Pong::setValue(const QString &newValue)
|
|||||||
|
|
||||||
void Pong::quit()
|
void Pong::quit()
|
||||||
{
|
{
|
||||||
QTimer::singleShot(0, QCoreApplication::instance(), &QCoreApplication::quit);
|
QMetaObject::invokeMethod(QCoreApplication::instance(), &QCoreApplication::quit,
|
||||||
|
Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
QDBusVariant Pong::query(const QString &query)
|
QDBusVariant Pong::query(const QString &query)
|
||||||
@ -54,12 +51,13 @@ int main(int argc, char **argv)
|
|||||||
Pong *pong = new Pong(&obj);
|
Pong *pong = new Pong(&obj);
|
||||||
QObject::connect(&app, &QCoreApplication::aboutToQuit, pong, &Pong::aboutToQuit);
|
QObject::connect(&app, &QCoreApplication::aboutToQuit, pong, &Pong::aboutToQuit);
|
||||||
pong->setProperty("value", "initial value");
|
pong->setProperty("value", "initial value");
|
||||||
QDBusConnection::sessionBus().registerObject("/", &obj);
|
|
||||||
|
|
||||||
if (!QDBusConnection::sessionBus().registerService(SERVICE_NAME)) {
|
auto connection = QDBusConnection::sessionBus();
|
||||||
fprintf(stderr, "%s\n",
|
connection.registerObject("/", &obj);
|
||||||
qPrintable(QDBusConnection::sessionBus().lastError().message()));
|
|
||||||
exit(1);
|
if (!connection.registerService(SERVICE_NAME)) {
|
||||||
|
qWarning().noquote() << connection.lastError().message();
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
app.exec();
|
app.exec();
|
||||||
|
@ -8,23 +8,26 @@
|
|||||||
#include <QtDBus/QDBusAbstractAdaptor>
|
#include <QtDBus/QDBusAbstractAdaptor>
|
||||||
#include <QtDBus/QDBusVariant>
|
#include <QtDBus/QDBusVariant>
|
||||||
|
|
||||||
class Pong: public QDBusAbstractAdaptor
|
class Pong : public QDBusAbstractAdaptor
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_CLASSINFO("D-Bus Interface", "org.example.QtDBus.ComplexPong.Pong")
|
Q_CLASSINFO("D-Bus Interface", "org.example.QtDBus.ComplexPong.Pong")
|
||||||
Q_PROPERTY(QString value READ value WRITE setValue)
|
Q_PROPERTY(QString value READ value WRITE setValue)
|
||||||
public:
|
public:
|
||||||
QString m_value;
|
|
||||||
QString value() const;
|
QString value() const;
|
||||||
void setValue(const QString &newValue);
|
void setValue(const QString &newValue);
|
||||||
|
|
||||||
Pong(QObject *obj) : QDBusAbstractAdaptor(obj)
|
Pong(QObject *obj) : QDBusAbstractAdaptor(obj) { }
|
||||||
{ }
|
|
||||||
signals:
|
signals:
|
||||||
void aboutToQuit();
|
void aboutToQuit();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
QDBusVariant query(const QString &query);
|
QDBusVariant query(const QString &query);
|
||||||
Q_NOREPLY void quit();
|
Q_NOREPLY void quit();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString m_value;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user