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 <QCoreApplication>
|
||||
#include <QDBusInterface>
|
||||
#include <QDBusReply>
|
||||
#include <QDBusServiceWatcher>
|
||||
#include <QFile>
|
||||
#include <QDebug>
|
||||
#include <QProcess>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
void Ping::start(const QString &name)
|
||||
{
|
||||
if (name != SERVICE_NAME)
|
||||
return;
|
||||
|
||||
// open stdin for reading
|
||||
qstdin.open(stdin, QIODevice::ReadOnly);
|
||||
|
||||
auto connection = QDBusConnection::sessionBus();
|
||||
// find our remote
|
||||
iface = new QDBusInterface(SERVICE_NAME, "/", "org.example.QtDBus.ComplexPong.Pong",
|
||||
QDBusConnection::sessionBus(), this);
|
||||
auto iface = new QDBusInterface(SERVICE_NAME, "/", "org.example.QtDBus.ComplexPong.Pong",
|
||||
connection, this);
|
||||
if (!iface->isValid()) {
|
||||
fprintf(stderr, "%s\n",
|
||||
qPrintable(QDBusConnection::sessionBus().lastError().message()));
|
||||
qWarning().noquote() << connection.lastError().message();
|
||||
QCoreApplication::instance()->quit();
|
||||
}
|
||||
|
||||
connect(iface, SIGNAL(aboutToQuit()), QCoreApplication::instance(), SLOT(quit()));
|
||||
|
||||
while (true) {
|
||||
printf("Ask your question: ");
|
||||
std::string s;
|
||||
|
||||
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()) {
|
||||
iface->call("quit");
|
||||
return;
|
||||
} else if (line == "value") {
|
||||
QVariant reply = iface->property("value");
|
||||
if (!reply.isNull())
|
||||
printf("value = %s\n", qPrintable(reply.toString()));
|
||||
std::cout << "value = " << qPrintable(reply.toString()) << std::endl;
|
||||
} else if (line.startsWith("value=")) {
|
||||
iface->setProperty("value", line.mid(6));
|
||||
} else {
|
||||
QDBusReply<QDBusVariant> reply = iface->call("query", line);
|
||||
if (reply.isValid())
|
||||
printf("Reply was: %s\n", qPrintable(reply.value().variant().toString()));
|
||||
if (reply.isValid()) {
|
||||
std::cout << qPrintable(tr("Reply was: %1").arg(reply.value().variant().toString()))
|
||||
<< std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
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"
|
||||
"\teval `dbus-launch --auto-syntax`\n");
|
||||
"\teval `dbus-launch --auto-syntax`");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -5,17 +5,12 @@
|
||||
#define COMPLEXPING_H
|
||||
|
||||
#include <QtCore/QObject>
|
||||
#include <QtCore/QFile>
|
||||
#include <QtDBus/QDBusInterface>
|
||||
|
||||
class Ping: public QObject
|
||||
class Ping : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public slots:
|
||||
void start(const QString &);
|
||||
public:
|
||||
QFile qstdin;
|
||||
QDBusInterface *iface;
|
||||
void start(const QString &name);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -7,12 +7,8 @@
|
||||
#include <QCoreApplication>
|
||||
#include <QDBusConnection>
|
||||
#include <QDBusError>
|
||||
#include <QTimer>
|
||||
#include <QDebug>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
// the property
|
||||
QString Pong::value() const
|
||||
{
|
||||
return m_value;
|
||||
@ -25,7 +21,8 @@ void Pong::setValue(const QString &newValue)
|
||||
|
||||
void Pong::quit()
|
||||
{
|
||||
QTimer::singleShot(0, QCoreApplication::instance(), &QCoreApplication::quit);
|
||||
QMetaObject::invokeMethod(QCoreApplication::instance(), &QCoreApplication::quit,
|
||||
Qt::QueuedConnection);
|
||||
}
|
||||
|
||||
QDBusVariant Pong::query(const QString &query)
|
||||
@ -54,12 +51,13 @@ int main(int argc, char **argv)
|
||||
Pong *pong = new Pong(&obj);
|
||||
QObject::connect(&app, &QCoreApplication::aboutToQuit, pong, &Pong::aboutToQuit);
|
||||
pong->setProperty("value", "initial value");
|
||||
QDBusConnection::sessionBus().registerObject("/", &obj);
|
||||
|
||||
if (!QDBusConnection::sessionBus().registerService(SERVICE_NAME)) {
|
||||
fprintf(stderr, "%s\n",
|
||||
qPrintable(QDBusConnection::sessionBus().lastError().message()));
|
||||
exit(1);
|
||||
auto connection = QDBusConnection::sessionBus();
|
||||
connection.registerObject("/", &obj);
|
||||
|
||||
if (!connection.registerService(SERVICE_NAME)) {
|
||||
qWarning().noquote() << connection.lastError().message();
|
||||
return 1;
|
||||
}
|
||||
|
||||
app.exec();
|
||||
|
@ -8,23 +8,26 @@
|
||||
#include <QtDBus/QDBusAbstractAdaptor>
|
||||
#include <QtDBus/QDBusVariant>
|
||||
|
||||
class Pong: public QDBusAbstractAdaptor
|
||||
class Pong : public QDBusAbstractAdaptor
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_CLASSINFO("D-Bus Interface", "org.example.QtDBus.ComplexPong.Pong")
|
||||
Q_PROPERTY(QString value READ value WRITE setValue)
|
||||
public:
|
||||
QString m_value;
|
||||
QString value() const;
|
||||
void setValue(const QString &newValue);
|
||||
|
||||
Pong(QObject *obj) : QDBusAbstractAdaptor(obj)
|
||||
{ }
|
||||
Pong(QObject *obj) : QDBusAbstractAdaptor(obj) { }
|
||||
|
||||
signals:
|
||||
void aboutToQuit();
|
||||
|
||||
public slots:
|
||||
QDBusVariant query(const QString &query);
|
||||
Q_NOREPLY void quit();
|
||||
|
||||
private:
|
||||
QString m_value;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user