diff options
author | Liang Qi <liang.qi@qt.io> | 2017-07-06 13:54:35 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2017-07-06 13:55:28 +0200 |
commit | 4feae652c9c12ec4e5ef4c7bd575f8f316494add (patch) | |
tree | 06571ec9b38fe312cba430092ab4a82ace5c6af1 /examples | |
parent | 7761bb88000c19d2f5bfb1182f5c5ddf7dae6c5a (diff) | |
parent | b0089abb05e6f60cc252068be1ba40be32e29bd3 (diff) |
Merge remote-tracking branch 'origin/5.9' into dev
Conflicts:
.qmake.conf
Change-Id: I7a55929aefa1f7a4dc96f841317b78b248899f67
Diffstat (limited to 'examples')
-rw-r--r-- | examples/bluetooth/btchat/btchat.pro | 1 | ||||
-rw-r--r-- | examples/bluetooth/btchat/chat.cpp | 14 | ||||
-rw-r--r-- | examples/bluetooth/btchat/main.cpp | 4 | ||||
-rw-r--r-- | examples/bluetooth/chat/Search.qml | 3 | ||||
-rw-r--r-- | examples/bluetooth/chat/chat.pro | 1 | ||||
-rw-r--r-- | examples/bluetooth/chat/chat.qml | 25 | ||||
-rw-r--r-- | examples/bluetooth/chat/doc/src/chat.qdoc | 2 | ||||
-rw-r--r-- | examples/bluetooth/chat/qmlchat.cpp | 18 | ||||
-rw-r--r-- | examples/bluetooth/lowenergyscanner/device.cpp | 36 | ||||
-rw-r--r-- | examples/bluetooth/pingpong/assets/Dialog.qml | 2 | ||||
-rw-r--r-- | examples/bluetooth/pingpong/assets/Menu.qml | 11 | ||||
-rw-r--r-- | examples/bluetooth/pingpong/main.cpp | 3 | ||||
-rw-r--r-- | examples/bluetooth/pingpong/pingpong.cpp | 48 | ||||
-rw-r--r-- | examples/bluetooth/pingpong/pingpong.h | 3 | ||||
-rw-r--r-- | examples/bluetooth/pingpong/pingpong.pro | 1 |
15 files changed, 127 insertions, 45 deletions
diff --git a/examples/bluetooth/btchat/btchat.pro b/examples/bluetooth/btchat/btchat.pro index 08fdd4a7..6ecae4c7 100644 --- a/examples/bluetooth/btchat/btchat.pro +++ b/examples/bluetooth/btchat/btchat.pro @@ -2,6 +2,7 @@ TEMPLATE = app TARGET = btchat QT = core bluetooth widgets +android: QT += androidextras SOURCES = \ main.cpp \ diff --git a/examples/bluetooth/btchat/chat.cpp b/examples/bluetooth/btchat/chat.cpp index 51a2d4ed..929a42e4 100644 --- a/examples/bluetooth/btchat/chat.cpp +++ b/examples/bluetooth/btchat/chat.cpp @@ -49,11 +49,18 @@ #include <qbluetoothdeviceinfo.h> #include <qbluetoothlocaldevice.h> +#ifdef Q_OS_ANDROID +#include <QtAndroidExtras/QtAndroid> +#endif + #include <QTimer> #include <QDebug> static const QLatin1String serviceUuid("e8e10f95-1a70-4b27-9ccf-02010264e9c8"); +#ifdef Q_OS_ANDROID +static const QLatin1String reverseUuid("c8e96402-0102-cf9c-274b-701a950fe1e8"); +#endif Chat::Chat(QWidget *parent) : QDialog(parent), currentAdapterIndex(0), ui(new Ui_Chat) @@ -170,7 +177,14 @@ void Chat::connectClicked() localAdapters.at(currentAdapterIndex).address(); RemoteSelector remoteSelector(adapter); +#ifdef Q_OS_ANDROID + if (QtAndroid::androidSdkVersion() >= 23) + remoteSelector.startDiscovery(QBluetoothUuid(reverseUuid)); + else + remoteSelector.startDiscovery(QBluetoothUuid(serviceUuid)); +#else remoteSelector.startDiscovery(QBluetoothUuid(serviceUuid)); +#endif if (remoteSelector.exec() == QDialog::Accepted) { QBluetoothServiceInfo service = remoteSelector.service(); diff --git a/examples/bluetooth/btchat/main.cpp b/examples/bluetooth/btchat/main.cpp index bb862798..50e682e7 100644 --- a/examples/bluetooth/btchat/main.cpp +++ b/examples/bluetooth/btchat/main.cpp @@ -51,7 +51,11 @@ int main(int argc, char *argv[]) Chat d; QObject::connect(&d, SIGNAL(accepted()), &app, SLOT(quit())); +#ifdef Q_OS_ANDROID + d.showMaximized(); +#else d.show(); +#endif app.exec(); diff --git a/examples/bluetooth/chat/Search.qml b/examples/bluetooth/chat/Search.qml index f1f8f6ac..ea542462 100644 --- a/examples/bluetooth/chat/Search.qml +++ b/examples/bluetooth/chat/Search.qml @@ -46,6 +46,9 @@ Rectangle { function appendText(newText) { searchText.text += newText } + function setText(newText) { + searchText.text = newText + } width: searchText.width + 40; height: searchText.height + bluetoothImage.height + 40; diff --git a/examples/bluetooth/chat/chat.pro b/examples/bluetooth/chat/chat.pro index 7bc5c8bd..36d815f9 100644 --- a/examples/bluetooth/chat/chat.pro +++ b/examples/bluetooth/chat/chat.pro @@ -1,4 +1,5 @@ QT = core bluetooth quick +android: QT += androidextras #see QTBUG-61392 SOURCES += qmlchat.cpp TARGET = qml_chat diff --git a/examples/bluetooth/chat/chat.qml b/examples/bluetooth/chat/chat.qml index ecac39fc..eee29789 100644 --- a/examples/bluetooth/chat/chat.qml +++ b/examples/bluetooth/chat/chat.qml @@ -53,7 +53,7 @@ Item { BluetoothDiscoveryModel { id: btModel running: true - discoveryMode: BluetoothDiscoveryModel.MinimalServiceDiscovery + discoveryMode: BluetoothDiscoveryModel.FullServiceDiscovery //! [BtDiscoveryModel-1] onRunningChanged : { if (!btModel.running && top.state == "begin" && !serviceFound) { @@ -81,7 +81,7 @@ Item { } //! [BtDiscoveryModel-2] //! [BtDiscoveryModel-3] - uuidFilter: "e8e10f95-1a70-4b27-9ccf-02010264e9c8" + uuidFilter: targetUuid //e8e10f95-1a70-4b27-9ccf-02010264e9c8 } //! [BtDiscoveryModel-3] @@ -91,8 +91,24 @@ Item { connected: true onSocketStateChanged: { - console.log("Connected to server") - top.state = "chatActive" + switch (socketState) { + case BluetoothSocket.Unconnected: + case BluetoothSocket.NoServiceSet: + searchBox.animationRunning = false; + searchBox.setText("\nNo connection. \n\nPlease restart app."); + top.state = "begin"; + break; + case BluetoothSocket.Connected: + console.log("Connected to server "); + top.state = "chatActive"; // move to chat UI + break; + case BluetoothSocket.Connecting: + case BluetoothSocket.ServiceLookup: + case BluetoothSocket.Closing: + case BluetoothSocket.Listening: + case BluetoothSocket.Bound: + break; + } } //! [BluetoothSocket-1] //! [BluetoothSocket-3] @@ -107,6 +123,7 @@ Item { } //! [BluetoothSocket-4] //! [BluetoothSocket-2] + //... } //! [BluetoothSocket-2] diff --git a/examples/bluetooth/chat/doc/src/chat.qdoc b/examples/bluetooth/chat/doc/src/chat.qdoc index 4b5e8778..e32a7a32 100644 --- a/examples/bluetooth/chat/doc/src/chat.qdoc +++ b/examples/bluetooth/chat/doc/src/chat.qdoc @@ -69,7 +69,7 @@ of the Bluetooth device offering the chat server. It is passed to the \l BluetoothSocket to establish the connection. - Once the connection is established the chat information is: + Once the connection is established the socket's state is managed as follows: \snippet chat/chat.qml BluetoothSocket-1 \snippet chat/chat.qml BluetoothSocket-2 diff --git a/examples/bluetooth/chat/qmlchat.cpp b/examples/bluetooth/chat/qmlchat.cpp index 8cd90bda..c6ff6341 100644 --- a/examples/bluetooth/chat/qmlchat.cpp +++ b/examples/bluetooth/chat/qmlchat.cpp @@ -44,9 +44,14 @@ #include <QtQml/QQmlContext> #include <QDebug> #include <QBluetoothLocalDevice> +#include <QtCore/QLoggingCategory> +#ifdef Q_OS_ANDROID +#include <QtAndroidExtras/QtAndroid> +#endif int main(int argc, char *argv[]) { + //QLoggingCategory::setFilterRules(QStringLiteral("qt.bluetooth* = true")); QGuiApplication application(argc, argv); QList<QBluetoothHostInfo> infos = QBluetoothLocalDevice::allDevices(); @@ -56,6 +61,19 @@ int main(int argc, char *argv[]) const QString mainQmlApp = QLatin1String("qrc:/chat.qml"); QQuickView view; + +#ifdef Q_OS_ANDROID + //workaround for Android's SDP discovery bug (see QTBUG-61392) + QString uuid; + if (QtAndroid::androidSdkVersion() >= 23) + uuid = QStringLiteral("c8e96402-0102-cf9c-274b-701a950fe1e8"); + else + uuid = QStringLiteral("e8e10f95-1a70-4b27-9ccf-02010264e9c8"); +#else + const QString uuid(QStringLiteral("e8e10f95-1a70-4b27-9ccf-02010264e9c8")); +#endif + + view.engine()->rootContext()->setContextProperty(QStringLiteral("targetUuid"), uuid); view.setSource(QUrl(mainQmlApp)); view.setResizeMode(QQuickView::SizeRootObjectToView); // Qt.quit() called in embedded .qml by default only emits diff --git a/examples/bluetooth/lowenergyscanner/device.cpp b/examples/bluetooth/lowenergyscanner/device.cpp index 28a051f5..0275c435 100644 --- a/examples/bluetooth/lowenergyscanner/device.cpp +++ b/examples/bluetooth/lowenergyscanner/device.cpp @@ -55,11 +55,11 @@ Device::Device(): //! [les-devicediscovery-1] discoveryAgent = new QBluetoothDeviceDiscoveryAgent(); discoveryAgent->setLowEnergyDiscoveryTimeout(5000); - connect(discoveryAgent, SIGNAL(deviceDiscovered(const QBluetoothDeviceInfo&)), - this, SLOT(addDevice(const QBluetoothDeviceInfo&))); - connect(discoveryAgent, SIGNAL(error(QBluetoothDeviceDiscoveryAgent::Error)), - this, SLOT(deviceScanError(QBluetoothDeviceDiscoveryAgent::Error))); - connect(discoveryAgent, SIGNAL(finished()), this, SLOT(deviceScanFinished())); + connect(discoveryAgent, &QBluetoothDeviceDiscoveryAgent::deviceDiscovered, + this, &Device::addDevice); + connect(discoveryAgent, QOverload<QBluetoothDeviceDiscoveryAgent::Error>::of(&QBluetoothDeviceDiscoveryAgent::error), + this, &Device::deviceScanError); + connect(discoveryAgent, &QBluetoothDeviceDiscoveryAgent::finished, this, &Device::deviceScanFinished); //! [les-devicediscovery-1] setUpdate("Search"); @@ -169,16 +169,16 @@ void Device::scanServices(const QString &address) if (!controller) { // Connecting signals and slots for connecting to LE services. controller = new QLowEnergyController(currentDevice.getDevice()); - connect(controller, SIGNAL(connected()), - this, SLOT(deviceConnected())); - connect(controller, SIGNAL(error(QLowEnergyController::Error)), - this, SLOT(errorReceived(QLowEnergyController::Error))); - connect(controller, SIGNAL(disconnected()), - this, SLOT(deviceDisconnected())); - connect(controller, SIGNAL(serviceDiscovered(QBluetoothUuid)), - this, SLOT(addLowEnergyService(QBluetoothUuid))); - connect(controller, SIGNAL(discoveryFinished()), - this, SLOT(serviceScanDone())); + connect(controller, &QLowEnergyController::connected, + this, &Device::deviceConnected); + connect(controller, QOverload<QLowEnergyController::Error>::of(&QLowEnergyController::error), + this, &Device::errorReceived); + connect(controller, &QLowEnergyController::disconnected, + this, &Device::deviceDisconnected); + connect(controller, &QLowEnergyController::serviceDiscovered, + this, &Device::addLowEnergyService); + connect(controller, &QLowEnergyController::discoveryFinished, + this, &Device::serviceScanDone); } if (isRandomAddress()) @@ -235,8 +235,8 @@ void Device::connectToService(const QString &uuid) if (service->state() == QLowEnergyService::DiscoveryRequired) { //! [les-service-3] - connect(service, SIGNAL(stateChanged(QLowEnergyService::ServiceState)), - this, SLOT(serviceDetailsDiscovered(QLowEnergyService::ServiceState))); + connect(service, &QLowEnergyService::stateChanged, + this, &Device::serviceDetailsDiscovered); service->discoverDetails(); setUpdate("Back\n(Discovering details...)"); //! [les-service-3] @@ -250,7 +250,7 @@ void Device::connectToService(const QString &uuid) m_characteristics.append(cInfo); } - QTimer::singleShot(0, this, SIGNAL(characteristicsUpdated())); + QTimer::singleShot(0, this, &Device::characteristicsUpdated); } void Device::deviceConnected() diff --git a/examples/bluetooth/pingpong/assets/Dialog.qml b/examples/bluetooth/pingpong/assets/Dialog.qml index 2a332715..53be3eaa 100644 --- a/examples/bluetooth/pingpong/assets/Dialog.qml +++ b/examples/bluetooth/pingpong/assets/Dialog.qml @@ -42,7 +42,7 @@ import QtQuick 2.0 Rectangle { width: parent.width/2 - height: 100 + height: message.implicitHeight*2 z: 50 border.width: 2 border.color: "#363636" diff --git a/examples/bluetooth/pingpong/assets/Menu.qml b/examples/bluetooth/pingpong/assets/Menu.qml index b7516262..09eabb36 100644 --- a/examples/bluetooth/pingpong/assets/Menu.qml +++ b/examples/bluetooth/pingpong/assets/Menu.qml @@ -47,17 +47,18 @@ Rectangle { Rectangle { width: parent.width - height: 70 + height: headerText.implicitHeight *1.2 border.width: 1 border.color: "#363636" radius: 5 Text { + id: headerText horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter anchors.fill: parent text: "Welcome to PingPong Game \n Please select an option" - font.pixelSize: 20 + font.pointSize: 20 elide: Text.ElideMiddle color: "#363636" } @@ -67,10 +68,11 @@ Rectangle { id: startServer anchors.centerIn: parent width: parent.width/2 - height: parent.height/5 + height: startServerText.implicitHeight*5 color: "#363636" Text { + id: startServerText horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter anchors.fill: parent @@ -95,10 +97,11 @@ Rectangle { anchors.top: startServer.bottom anchors.topMargin: 10 width: parent.width/2 - height: parent.height/5 + height: startClientText.implicitHeight*5 color: "#363636" Text { + id: startClientText horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter anchors.fill: parent diff --git a/examples/bluetooth/pingpong/main.cpp b/examples/bluetooth/pingpong/main.cpp index d2a84440..b6430248 100644 --- a/examples/bluetooth/pingpong/main.cpp +++ b/examples/bluetooth/pingpong/main.cpp @@ -41,10 +41,13 @@ #include <QQmlContext> #include <QGuiApplication> #include <QQmlApplicationEngine> +#include <QLoggingCategory> #include "pingpong.h" + int main(int argc, char *argv[]) { + //QLoggingCategory::setFilterRules(QStringLiteral("qt.bluetooth* = true")); QGuiApplication app(argc, argv); PingPong pingPong; QQmlApplicationEngine engine; diff --git a/examples/bluetooth/pingpong/pingpong.cpp b/examples/bluetooth/pingpong/pingpong.cpp index ab6ba8c7..d893f64c 100644 --- a/examples/bluetooth/pingpong/pingpong.cpp +++ b/examples/bluetooth/pingpong/pingpong.cpp @@ -40,13 +40,16 @@ #include "pingpong.h" #include <QDebug> +#ifdef Q_OS_ANDROID +#include <QtAndroid> +#endif PingPong::PingPong(): m_serverInfo(0), socket(0), discoveryAgent(0), interval(5), m_resultLeft(0), m_resultRight(0), m_showDialog(false), m_role(0), m_proportionX(0), m_proportionY(0), m_serviceFound(false) { m_timer = new QTimer(this); - connect(m_timer, SIGNAL(timeout()), this, SLOT(update())); + connect(m_timer, &QTimer::timeout, this, &PingPong::update); } PingPong::~PingPong() @@ -230,9 +233,10 @@ void PingPong::startServer() setMessage(QStringLiteral("Starting the server")); //! [Starting the server] m_serverInfo = new QBluetoothServer(QBluetoothServiceInfo::RfcommProtocol, this); - connect(m_serverInfo, SIGNAL(newConnection()), this, SLOT(clientConnected())); - connect(m_serverInfo, SIGNAL(error(QBluetoothServer::Error)), - this, SLOT(serverError(QBluetoothServer::Error))); + connect(m_serverInfo, &QBluetoothServer::newConnection, + this, &PingPong::clientConnected); + connect(m_serverInfo, QOverload<QBluetoothServer::Error>::of(&QBluetoothServer::error), + this, &PingPong::serverError); const QBluetoothUuid uuid(serviceUuid); m_serverInfo->listen(uuid, QStringLiteral("PingPong server")); @@ -248,13 +252,22 @@ void PingPong::startClient() //! [Searching for the service] discoveryAgent = new QBluetoothServiceDiscoveryAgent(QBluetoothAddress()); - connect(discoveryAgent, SIGNAL(serviceDiscovered(QBluetoothServiceInfo)), - this, SLOT(addService(QBluetoothServiceInfo))); - connect(discoveryAgent, SIGNAL(finished()), this, SLOT(done())); - connect(discoveryAgent, SIGNAL(error(QBluetoothServiceDiscoveryAgent::Error)), - this, SLOT(serviceScanError(QBluetoothServiceDiscoveryAgent::Error))); + connect(discoveryAgent, &QBluetoothServiceDiscoveryAgent::serviceDiscovered, + this, &PingPong::addService); + connect(discoveryAgent, &QBluetoothServiceDiscoveryAgent::finished, + this, &PingPong::done); + connect(discoveryAgent, QOverload<QBluetoothServiceDiscoveryAgent::Error>::of(&QBluetoothServiceDiscoveryAgent::error), + this, &PingPong::serviceScanError); +#ifdef Q_OS_ANDROID //see QTBUG-61392 + if (QtAndroid::androidSdkVersion() >= 23) + discoveryAgent->setUuidFilter(QBluetoothUuid(androidUuid)); + else + discoveryAgent->setUuidFilter(QBluetoothUuid(serviceUuid)); +#else discoveryAgent->setUuidFilter(QBluetoothUuid(serviceUuid)); +#endif discoveryAgent->start(QBluetoothServiceDiscoveryAgent::FullDiscovery); + //! [Searching for the service] setMessage(QStringLiteral("Starting server discovery. You are the right player")); // m_role is set to 2 if it is a client @@ -273,10 +286,13 @@ void PingPong::clientConnected() if (!socket) return; socket->setParent(this); - connect(socket, SIGNAL(readyRead()), this, SLOT(readSocket())); - connect(socket, SIGNAL(disconnected()), this, SLOT(clientDisconnected())); - connect(socket, SIGNAL(error(QBluetoothSocket::SocketError)), - this, SLOT(socketError(QBluetoothSocket::SocketError))); + connect(socket, &QBluetoothSocket::readyRead, + this, &PingPong::readSocket); + connect(socket, &QBluetoothSocket::disconnected, + this, &PingPong::clientDisconnected); + connect(socket, QOverload<QBluetoothSocket::SocketError>::of(&QBluetoothSocket::error), + this, &PingPong::socketError); + //! [Initiating server socket] setMessage(QStringLiteral("Client connected.")); @@ -323,9 +339,9 @@ void PingPong::addService(const QBluetoothServiceInfo &service) socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol); socket->connectToService(service); - connect(socket, SIGNAL(readyRead()), this, SLOT(readSocket())); - connect(socket, SIGNAL(connected()), this, SLOT(serverConnected())); - connect(socket, SIGNAL(disconnected()), this, SLOT(serverDisconnected())); + connect(socket, &QBluetoothSocket::readyRead, this, &PingPong::readSocket); + connect(socket, &QBluetoothSocket::connected, this, &PingPong::serverConnected); + connect(socket, &QBluetoothSocket::disconnected, this, &PingPong::serverDisconnected); //! [Connecting the socket] m_serviceFound = true; } diff --git a/examples/bluetooth/pingpong/pingpong.h b/examples/bluetooth/pingpong/pingpong.h index 650cd597..21c9ef1c 100644 --- a/examples/bluetooth/pingpong/pingpong.h +++ b/examples/bluetooth/pingpong/pingpong.h @@ -48,7 +48,8 @@ #include <qbluetoothlocaldevice.h> #include <qbluetoothservicediscoveryagent.h> -static const QString serviceUuid(QStringLiteral("e8e10f95-1a70-4b27-9ccf-02010264e9c9")); +static QString serviceUuid(QStringLiteral("e8e10f95-1a70-4b27-9ccf-02010264e9c9")); +static QString androidUuid(QStringLiteral("c9e96402-0102-cf9c-274b-701a950fe1e8")); class PingPong: public QObject { diff --git a/examples/bluetooth/pingpong/pingpong.pro b/examples/bluetooth/pingpong/pingpong.pro index 07675f27..aa79212e 100644 --- a/examples/bluetooth/pingpong/pingpong.pro +++ b/examples/bluetooth/pingpong/pingpong.pro @@ -2,6 +2,7 @@ TEMPLATE = app TARGET = pingpong QT += quick bluetooth +android: QT += androidextras # Input SOURCES += main.cpp \ |