×
Namespaces

Variants
Actions
(Difference between revisions)

QML SMShelper Plugin

From Nokia Developer Wiki
Jump to: navigation, search
hamishwillee (Talk | contribs)
m (Hamishwillee - Bot update - Fix ArticleMetaData and other general fixes)
hamishwillee (Talk | contribs)
m (Hamishwillee - Tidy Abstract, create links to reference)
Line 1: Line 1:
 
[[Category:Qt]][[Category:Qt Mobility]][[Category:Qt Quick]][[Category:SMS]][[Category:Code Examples]][[Category:MeeGo 1.2 Harmattan]][[Category:MeeGo]]
 
[[Category:Qt]][[Category:Qt Mobility]][[Category:Qt Quick]][[Category:SMS]][[Category:Code Examples]][[Category:MeeGo 1.2 Harmattan]][[Category:MeeGo]]
{{Abstract|SMSplugin to expose Qt mobility SMS APIs to QML environment}}
+
{{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]].
__NOTOC__ __NOEDITSECTION__
+
 
 
{{ArticleMetaData <!-- v1.2 -->
 
{{ArticleMetaData <!-- v1.2 -->
 
|sourcecode= [[Media:Smssender.zip]]
 
|sourcecode= [[Media:Smssender.zip]]
Line 28: Line 28:
  
 
The following capabilities and libraries are required:
 
The following capabilities and libraries are required:
 
 
<code cpp>
 
<code cpp>
 
symbian:TARGET.CAPABILITY = NetworkServices
 
symbian:TARGET.CAPABILITY = NetworkServices
Line 79: Line 78:
 
     QMessageManager iManager;
 
     QMessageManager iManager;
 
     QMessageService::State state;
 
     QMessageService::State state;
 
 
 
};
 
};
  
Line 102: 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 140: Line 136:
 
     return true;
 
     return true;
 
#endif
 
#endif
 
 
 
 
}
 
}
  
Line 170: Line 163:
 
     }
 
     }
 
}
 
}
 
 
 
</code>  
 
</code>  
  

Revision as of 08:56, 20 February 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 (20 Feb 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.0

Example use QML

SMSHelper
{
id: smshelper
}

SMShelper developer APIs

//Constructor and destructor
SMSHelper(QObject *parent = 0);
~SMSHelper();
 
public slots:
sendsms(QString phonenumber, QString message);
 
signals:
void stateMsg(const QString &statemsg);
void errorMsg(const QString &errormsg);
void debugMsg(const QString &dbgmsg);
109 page views in the last 30 days.
×