Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Change code from QT5 to QT6
Forum Updated to NodeBB v4.3 + New Features

Change code from QT5 to QT6

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
2 Posts 2 Posters 285 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • H Offline
    H Offline
    Hamed_S
    wrote on 23 Jan 2024, 07:43 last edited by
    #1

    Hello everyone. This piece of my code is in c++ to send sms on android. How can I fix the following errors?
    my c++ code:
    #include "SmsSender.h"
    #include <QDebug>
    SmsSender::SmsSender():
    QObject(), Singleton<SmsSender>(),
    _nextMsgId(0), _sendingMsgs(),
    _nbMsgs(0), _nbSent(0), _nbDelivered(0), _nbErrors(0)
    {}

    SmsSender::~SmsSender()
    {
    qDeleteAll(_sendingMsgs);
    }

    #if defined (Q_OS_ANDROID)

    #include <QJniObject>
    #include <QtCore/qjniobject.h>
    #include <QtCore/qcoreapplication.h>
    #include <QtCore/private/qandroidextras_p.h>
    #endif
    void SmsSender::sendText(const QString &destMobile, const QString &msg)
    {
    #ifdef DEBUG
    LogService::sendLog("in da cpp: sending text to "+destMobile+ ": " +msg);
    #endif
    if (msg.isEmpty())
    {
    _error("SmsSender won't send an empty msg...");
    return;
    }

    #if defined (Q_OS_ANDROID)
    auto result = QtAndroidPrivate::checkPermission(QString("android.permission.SEND_SMS"));
    if(result == QtAndroidPrivate::Denied){
    _log("don't have android.permission.SEND_SMS");

      auto  resultHash = QtAndroidPrivate::requestPermissions(QStringList({"android.permission.SEND_SMS"}));
        if(resultHash["android.permission.SEND_SMS"] == QtAndroidPrivate::Denied)
        {
            _error("couldn't get android.permission.SEND_SMS");
            return;
        }
    }
    
    QJniObject myPhoneNumber = QJniObject::fromString(destMobile);
    QJniObject myTextMessage = QJniObject::fromString(msg);
    
    jint msgId = ++_nextMsgId;
    ++_nbMsgs;
    _sendingMsgs.insert(msgId, new SmsStatus(msgId));
    QJniObject::callStaticMethod<void>("sendMessage",
                                                  "(ILjava/lang/String;Ljava/lang/String;)V",
                                                  msgId,
                                                  myPhoneNumber.object<jstring>(),
                                                  myTextMessage.object<jstring>());
    

    #else
    Q_UNUSED(destMobile)
    Q_UNUSED(msg)
    _error("Sending text is only working on an Android device!...");
    #endif
    }

    void SmsSender::msgParts(int msgId, int nbParts)
    {
    _sendingMsgs[msgId]->nbParts = nbParts;
    _log(tr("Message #%1 has %2 parts").arg(msgId).arg(nbParts));
    }

    void SmsSender::msgSent(int msgId, bool success)
    {
    if (success)
    ++_sendingMsgs[msgId]->nbSent.first;
    else
    ++_sendingMsgs[msgId]->nbSent.second;

    if (_sendingMsgs[msgId]->allPartsSent())
    {
        _sendingMsgs[msgId]->state = MSG_STATE::SENT;
        QString msgStatus;
        int nbMsgErrors = _sendingMsgs[msgId]->nbSent.second;
        if (nbMsgErrors == 0)
        {
            ++_nbSent;
            msgStatus = tr("successfully");
        }
        else
        {
            ++_nbErrors;
            msgStatus = tr("with %1 errors").arg(nbMsgErrors);
        }
    
        _log(tr("Message #%1 has been sent %2").arg(msgId).arg(msgStatus));
    

    #if defined (Q_OS_ANDROID)
    QJniObject msgSent = QJniObject::fromString("MSG SENT");
    QJniObject::callStaticMethod<void>("popup",
    "(Ljava/lang/String;)V",
    msgSent.object<jstring>());
    #endif

    }
    

    }

    void SmsSender::msgDelivered(int msgId, bool success)
    {
    if (success)
    ++_sendingMsgs[msgId]->nbDelivered.first;
    else
    ++_sendingMsgs[msgId]->nbDelivered.second;

    if (_sendingMsgs[msgId]->allPartsDelivered())
    {
        _sendingMsgs[msgId]->state = MSG_STATE::DELIVERED;
        QString msgStatus;
        int nbMsgErrors = _sendingMsgs[msgId]->nbDelivered.second;
        if (nbMsgErrors == 0)
        {
            ++_nbDelivered;
            msgStatus = tr("successfully");
        }
        else
        {
            ++_nbErrors;
            msgStatus = tr("with %1 errors").arg(nbMsgErrors);
        }
    
        _log(tr("Message #%1 has been delivered %2").arg(msgId).arg(msgStatus));
    

    #if defined (Q_OS_ANDROID)
    QJniObject msgSent = QJniObject::fromString("MSG DELIVERED");
    QJniObject::callStaticMethod<void>("popup",
    "(Ljava/lang/String;)V",
    msgSent.object<jstring>());
    #endif
    }
    }

    void SmsSender::_log(const QString &txt)
    {
    qDebug() << txt;
    emit log(txt);
    }

    void SmsSender::_error(const QString &txt)
    {
    qCritical() << txt;
    emit error(txt);
    }

    errors:
    C:\Users\Ha_Sa\Documents\sendsms\SmsSender.cpp:36: error: invalid operands to binary expression ('QFutureQtAndroidPrivate::PermissionResult' and 'QtAndroidPrivate::PermissionResult')
    ..\sendsms\SmsSender.cpp:36:15: error: invalid operands to binary expression ('QFutureQtAndroidPrivate::PermissionResult' and 'QtAndroidPrivate::PermissionResult')
    if(result == QtAndroidPrivate::Denied){

            ^
    
    Axel SpoerlA 1 Reply Last reply 23 Jan 2024, 07:45
    0
    • H Hamed_S
      23 Jan 2024, 07:43

      Hello everyone. This piece of my code is in c++ to send sms on android. How can I fix the following errors?
      my c++ code:
      #include "SmsSender.h"
      #include <QDebug>
      SmsSender::SmsSender():
      QObject(), Singleton<SmsSender>(),
      _nextMsgId(0), _sendingMsgs(),
      _nbMsgs(0), _nbSent(0), _nbDelivered(0), _nbErrors(0)
      {}

      SmsSender::~SmsSender()
      {
      qDeleteAll(_sendingMsgs);
      }

      #if defined (Q_OS_ANDROID)

      #include <QJniObject>
      #include <QtCore/qjniobject.h>
      #include <QtCore/qcoreapplication.h>
      #include <QtCore/private/qandroidextras_p.h>
      #endif
      void SmsSender::sendText(const QString &destMobile, const QString &msg)
      {
      #ifdef DEBUG
      LogService::sendLog("in da cpp: sending text to "+destMobile+ ": " +msg);
      #endif
      if (msg.isEmpty())
      {
      _error("SmsSender won't send an empty msg...");
      return;
      }

      #if defined (Q_OS_ANDROID)
      auto result = QtAndroidPrivate::checkPermission(QString("android.permission.SEND_SMS"));
      if(result == QtAndroidPrivate::Denied){
      _log("don't have android.permission.SEND_SMS");

        auto  resultHash = QtAndroidPrivate::requestPermissions(QStringList({"android.permission.SEND_SMS"}));
          if(resultHash["android.permission.SEND_SMS"] == QtAndroidPrivate::Denied)
          {
              _error("couldn't get android.permission.SEND_SMS");
              return;
          }
      }
      
      QJniObject myPhoneNumber = QJniObject::fromString(destMobile);
      QJniObject myTextMessage = QJniObject::fromString(msg);
      
      jint msgId = ++_nextMsgId;
      ++_nbMsgs;
      _sendingMsgs.insert(msgId, new SmsStatus(msgId));
      QJniObject::callStaticMethod<void>("sendMessage",
                                                    "(ILjava/lang/String;Ljava/lang/String;)V",
                                                    msgId,
                                                    myPhoneNumber.object<jstring>(),
                                                    myTextMessage.object<jstring>());
      

      #else
      Q_UNUSED(destMobile)
      Q_UNUSED(msg)
      _error("Sending text is only working on an Android device!...");
      #endif
      }

      void SmsSender::msgParts(int msgId, int nbParts)
      {
      _sendingMsgs[msgId]->nbParts = nbParts;
      _log(tr("Message #%1 has %2 parts").arg(msgId).arg(nbParts));
      }

      void SmsSender::msgSent(int msgId, bool success)
      {
      if (success)
      ++_sendingMsgs[msgId]->nbSent.first;
      else
      ++_sendingMsgs[msgId]->nbSent.second;

      if (_sendingMsgs[msgId]->allPartsSent())
      {
          _sendingMsgs[msgId]->state = MSG_STATE::SENT;
          QString msgStatus;
          int nbMsgErrors = _sendingMsgs[msgId]->nbSent.second;
          if (nbMsgErrors == 0)
          {
              ++_nbSent;
              msgStatus = tr("successfully");
          }
          else
          {
              ++_nbErrors;
              msgStatus = tr("with %1 errors").arg(nbMsgErrors);
          }
      
          _log(tr("Message #%1 has been sent %2").arg(msgId).arg(msgStatus));
      

      #if defined (Q_OS_ANDROID)
      QJniObject msgSent = QJniObject::fromString("MSG SENT");
      QJniObject::callStaticMethod<void>("popup",
      "(Ljava/lang/String;)V",
      msgSent.object<jstring>());
      #endif

      }
      

      }

      void SmsSender::msgDelivered(int msgId, bool success)
      {
      if (success)
      ++_sendingMsgs[msgId]->nbDelivered.first;
      else
      ++_sendingMsgs[msgId]->nbDelivered.second;

      if (_sendingMsgs[msgId]->allPartsDelivered())
      {
          _sendingMsgs[msgId]->state = MSG_STATE::DELIVERED;
          QString msgStatus;
          int nbMsgErrors = _sendingMsgs[msgId]->nbDelivered.second;
          if (nbMsgErrors == 0)
          {
              ++_nbDelivered;
              msgStatus = tr("successfully");
          }
          else
          {
              ++_nbErrors;
              msgStatus = tr("with %1 errors").arg(nbMsgErrors);
          }
      
          _log(tr("Message #%1 has been delivered %2").arg(msgId).arg(msgStatus));
      

      #if defined (Q_OS_ANDROID)
      QJniObject msgSent = QJniObject::fromString("MSG DELIVERED");
      QJniObject::callStaticMethod<void>("popup",
      "(Ljava/lang/String;)V",
      msgSent.object<jstring>());
      #endif
      }
      }

      void SmsSender::_log(const QString &txt)
      {
      qDebug() << txt;
      emit log(txt);
      }

      void SmsSender::_error(const QString &txt)
      {
      qCritical() << txt;
      emit error(txt);
      }

      errors:
      C:\Users\Ha_Sa\Documents\sendsms\SmsSender.cpp:36: error: invalid operands to binary expression ('QFutureQtAndroidPrivate::PermissionResult' and 'QtAndroidPrivate::PermissionResult')
      ..\sendsms\SmsSender.cpp:36:15: error: invalid operands to binary expression ('QFutureQtAndroidPrivate::PermissionResult' and 'QtAndroidPrivate::PermissionResult')
      if(result == QtAndroidPrivate::Denied){

              ^
      
      Axel SpoerlA Offline
      Axel SpoerlA Offline
      Axel Spoerl
      Moderators
      wrote on 23 Jan 2024, 07:45 last edited by
      #2

      @Hamed_S
      Please format the code for better readability, either by using ``` at the beginning of each block, or by using the </> symbol.

      Software Engineer
      The Qt Company, Oslo

      1 Reply Last reply
      1

      1/2

      23 Jan 2024, 07:43

      • Login

      • Login or register to search.
      1 out of 2
      • First post
        1/2
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved