QML SMShelper Plugin
m (Rahulvala -) |
hamishwillee
(Talk | contribs) m (Text replace - "<code cpp>" to "<code cpp-qt>") |
||
| (5 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
| − | [[Category:Qt]][[Category:Qt Mobility]][[Category:Qt Quick]][[Category: | + | [[Category:Qt]][[Category:Qt Mobility]][[Category:Qt Quick]][[Category:SMS]][[Category:Code Examples]][[Category:MeeGo Harmattan]] |
| − | {{Abstract|SMSplugin to expose Qt | + | {{Abstract|This article creates a C++ extension to QML ({{Icode|SMSplugin}}) to expose [http://doc.qt.nokia.com/qtmobility/qtmessaging.html Qt Messaging APIs] to QML environment.}} Note it is also possible to launch the standard SMS editor from QML using [http://doc.qt.nokia.com/stable/qml-qt.html#openUrlExternally-method Qt.openUrlExternally], as described in [[How to use Qt.openUrlExternally in QML]]. |
| − | + | ||
| − | {{ArticleMetaData | + | {{ArticleMetaData <!-- v1.2 --> |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
|sourcecode= [[Media:Smssender.zip]] | |sourcecode= [[Media:Smssender.zip]] | ||
|installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) --> | |installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) --> | ||
| − | |sdk=[http://qt.nokia.com/downloads Qt SDK] 4.7.1 or newer and [http://qt.nokia.com/products/qt-addons/mobility Qt mobility] 1.1.0 or newer | + | |devices= N8, E7, C7 |
| − | |devicecompatability=<!-- Compatible devices (e.g.: All* (must have GPS) ) --> | + | |sdk= [http://qt.nokia.com/downloads Qt SDK] 4.7.1 or newer and [http://qt.nokia.com/products/qt-addons/mobility Qt mobility] 1.1.0 or newer |
| − | |signing=Self-Signed | + | |platform= Symbian^3 |
| − | |capabilities=NetworkServices | + | |devicecompatability= <!-- Compatible devices (e.g.: All* (must have GPS) ) --> |
| − | |author=[[User:Jahartik]] | + | |dependencies= <!-- Any other/external dependencies e.g.: Google Maps Api v1.0 --> |
| + | |signing= Self-Signed | ||
| + | |capabilities= NetworkServices | ||
| + | |keywords= QMessageService, QMessageManager | ||
| + | |language= <!-- Language category code for non-English topics - e.g. Lang-Chinese --> | ||
| + | |translated-by= <!-- [[User:XXXX]] --> | ||
| + | |translated-from-title= <!-- Title only --> | ||
| + | |translated-from-id= <!-- Id of translated revision --> | ||
| + | |review-by= <!-- After re-review: [[User:username]] --> | ||
| + | |review-timestamp= <!-- After re-review: YYYYMMDD --> | ||
| + | |update-by= <!-- After significant update: [[User:username]]--> | ||
| + | |update-timestamp= <!-- After significant update: YYYYMMDD --> | ||
| + | |creationdate= 20110429 | ||
| + | |author= [[User:Jahartik]] | ||
}} | }} | ||
| Line 19: | Line 28: | ||
The following capabilities and libraries are required: | The following capabilities and libraries are required: | ||
| − | + | <code cpp-qt> | |
| − | <code cpp> | + | |
symbian:TARGET.CAPABILITY = NetworkServices | symbian:TARGET.CAPABILITY = NetworkServices | ||
CONFIG += mobility | CONFIG += mobility | ||
| Line 29: | Line 37: | ||
'''smshelper.h''' applying this macro to definitions of member functions to allow them to be invoked via the''' meta-object system''' | '''smshelper.h''' applying this macro to definitions of member functions to allow them to be invoked via the''' meta-object system''' | ||
| − | <code cpp> | + | <code cpp-qt> |
#ifndef SMSHELPER_H | #ifndef SMSHELPER_H | ||
#define SMSHELPER_H | #define SMSHELPER_H | ||
| Line 70: | Line 78: | ||
QMessageManager iManager; | QMessageManager iManager; | ||
QMessageService::State state; | QMessageService::State state; | ||
| − | |||
| − | |||
}; | }; | ||
| Line 81: | Line 87: | ||
smshelper source code | smshelper source code | ||
| − | <code cpp> | + | <code cpp-qt> |
#include "smshelper.h" | #include "smshelper.h" | ||
| Line 93: | Line 99: | ||
state = QMessageService::InactiveState; | state = QMessageService::InactiveState; | ||
connect(&iMessageService, SIGNAL(stateChanged(QMessageService::State)), this, SLOT(messageStateChanged(QMessageService::State))); | connect(&iMessageService, SIGNAL(stateChanged(QMessageService::State)), this, SLOT(messageStateChanged(QMessageService::State))); | ||
| − | |||
} | } | ||
| Line 131: | Line 136: | ||
return true; | return true; | ||
#endif | #endif | ||
| − | |||
| − | |||
| − | |||
} | } | ||
| Line 161: | Line 163: | ||
} | } | ||
} | } | ||
| − | |||
| − | |||
</code> | </code> | ||
To register the C++ type in the QML system with the name SMSHelper include following code in your main.cpp file | To register the C++ type in the QML system with the name SMSHelper include following code in your main.cpp file | ||
| − | <code cpp> | + | <code cpp-qt> |
qmlRegisterType<SMSHelper>("SMSHelper",1,0,"SMSHelper"); | qmlRegisterType<SMSHelper>("SMSHelper",1,0,"SMSHelper"); | ||
</code> | </code> | ||
Import sms plugin in QML | Import sms plugin in QML | ||
| − | <code cpp> | + | <code cpp-qt> |
import SMSHelper 1.0 | import SMSHelper 1.0 | ||
</code> | </code> | ||
| Line 186: | Line 186: | ||
== SMShelper developer APIs == | == SMShelper developer APIs == | ||
| − | <code cpp> | + | <code cpp-qt> |
//Constructor and destructor | //Constructor and destructor | ||
SMSHelper(QObject *parent = 0); | SMSHelper(QObject *parent = 0); | ||
Latest revision as of 04:18, 11 October 2012
This article creates a C++ extension to QML (SMSplugin) to expose Qt Messaging APIs to QML environment. Note it is also possible to launch the standard SMS editor from QML using Qt.openUrlExternally, as described in How to use Qt.openUrlExternally in QML.
Article Metadata
Code Example
Source file: Media:Smssender.zip
Tested with
SDK: Qt SDK 4.7.1 or newer and Qt mobility 1.1.0 or newer
Devices(s): N8, E7, C7
Compatibility
Platform(s): Symbian^3
Platform Security
Signing Required: Self-Signed
Capabilities: NetworkServices
Article
Keywords: QMessageService, QMessageManager
Created: jahartik
(29 Apr 2011)
Last edited: hamishwillee
(11 Oct 2012)
Contents |
Pro file
The following capabilities and libraries are required:
symbian:TARGET.CAPABILITY = NetworkServices
CONFIG += mobility
MOBILITY = messaging
Header file
smshelper.h applying this macro to definitions of member functions to allow them to be invoked via the meta-object system
#ifndef SMSHELPER_H
#define SMSHELPER_H
#include <QObject>
#include <qmessage.h>
#include <qmessageservice.h>
QTM_USE_NAMESPACE
#ifdef Q_OS_SYMBIAN
# define SENDSMS_ENABLED
#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
# define SENDSMS_ENABLED
#endif
class SMSHelper : public QObject
{
Q_OBJECT
public:
explicit SMSHelper(QObject *parent = 0);
~SMSHelper();
Q_INVOKABLE bool sendsms(QString phonenumber, QString message);
signals:
void stateMsg(const QString &statemsg);
void errorMsg(const QString &errormsg);
void debugMsg(const QString &dbgmsg);
private slots:
void messageStateChanged(QMessageService::State s);
#ifndef SENDSMS_ENABLED
void signalFinishedState() { emit stateMsg("FinishedState");};
#endif
private:
QMessageService iMessageService;
QMessageManager iManager;
QMessageService::State state;
};
#endif // SMSHELPER_H
Source file
smshelper source code
#include "smshelper.h"
#ifndef SENDSMS_ENABLED
#include <QTimer>
#endif
SMSHelper::SMSHelper(QObject *parent) :
QObject(parent)
{
state = QMessageService::InactiveState;
connect(&iMessageService, SIGNAL(stateChanged(QMessageService::State)), this, SLOT(messageStateChanged(QMessageService::State)));
}
SMSHelper::~SMSHelper()
{
}
bool SMSHelper::sendsms(QString phonenumber, QString message)
{
#ifdef SENDSMS_ENABLED
if (!QMessageAccount::defaultAccount(QMessage::Sms).isValid())
{
emit errorMsg("No messageaccount for sms sending.");
return false;
}
if (state == QMessageService::InactiveState || state == QMessageService::FinishedState)
{
QMessage sms;
sms.setType(QMessage::Sms);
sms.setParentAccountId(QMessageAccount::defaultAccount(QMessage::Sms));
sms.setTo(QMessageAddress(QMessageAddress::Phone, phonenumber));
sms.setBody(message);
return iMessageService.send(sms);
}
else
{
return false;
}
#else
QTimer::singleShot(1000,this,SLOT(signalFinishedState()));
return true;
#endif
}
void SMSHelper::messageStateChanged(QMessageService::State s)
{
state = s;
if (s == QMessageService::InactiveState)
{
emit stateMsg("InactiveState");
}
else if (s == QMessageService::ActiveState)
{
emit stateMsg("ActiveState");
}
else if (s == QMessageService::CanceledState)
{
emit stateMsg("CanceledState");
}
else if (s == QMessageService::FinishedState)
{
emit stateMsg("FinishedState");
}
else
{
emit stateMsg(QString("QMessageService::%1").arg(s));
}
}
To register the C++ type in the QML system with the name SMSHelper include following code in your main.cpp file
qmlRegisterType<SMSHelper>("SMSHelper",1,0,"SMSHelper");
Import sms plugin in QML
import SMSHelper 1.0Example use QML
SMSHelper
{
id: smshelper
}

