Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. [Solved]Lost Wifi settings after reboot
Forum Updated to NodeBB v4.3 + New Features

[Solved]Lost Wifi settings after reboot

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
14 Posts 3 Posters 2.1k 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.
  • K Offline
    K Offline
    Kuzma30
    wrote on last edited by Kuzma30
    #1

    I use in my app code from here
    https://code.qt.io/cgit/qt/qtdeviceutilities.git/tree/examples/deviceutilities/settingsuiapp/DeviceUtilities/SettingsUI/Network
    to make "Settings page".
    I can set WiFi parameters. Its works fine, but when I reboot (Qt6.x Raspberry CM4 with boot2qt distro) I lost my WiFi settings and need re-enter it again.

    In what place parameters saved and restored?

    I also try example code from
    https://doc.qt.io/QtDeviceUtilities-6.2/qnetworksettingsmanager.html#details

    I put

    #include <QtNetworkSettings/QNetworkSettingsManager>
    

    and add in main

        wifiManager = new QNetworkSettingsManager(this);
    wifiManager->connectBySsid("mySSID","my_passwod");
    

    but get error

    /home/qtemb/FertiGUI/main.cpp:568: error: invalid use of ‘this’ in non-member function
    /home/qtemb/FertiGUI/main.cpp:568:47: error: invalid use of ‘this’ in non-member function
      568 |     wifiManager = new QNetworkSettingsManager(this);
          |                                               ^~~~
    
    Axel SpoerlA 1 Reply Last reply
    0
    • K Kuzma30

      I use in my app code from here
      https://code.qt.io/cgit/qt/qtdeviceutilities.git/tree/examples/deviceutilities/settingsuiapp/DeviceUtilities/SettingsUI/Network
      to make "Settings page".
      I can set WiFi parameters. Its works fine, but when I reboot (Qt6.x Raspberry CM4 with boot2qt distro) I lost my WiFi settings and need re-enter it again.

      In what place parameters saved and restored?

      I also try example code from
      https://doc.qt.io/QtDeviceUtilities-6.2/qnetworksettingsmanager.html#details

      I put

      #include <QtNetworkSettings/QNetworkSettingsManager>
      

      and add in main

          wifiManager = new QNetworkSettingsManager(this);
      wifiManager->connectBySsid("mySSID","my_passwod");
      

      but get error

      /home/qtemb/FertiGUI/main.cpp:568: error: invalid use of ‘this’ in non-member function
      /home/qtemb/FertiGUI/main.cpp:568:47: error: invalid use of ‘this’ in non-member function
        568 |     wifiManager = new QNetworkSettingsManager(this);
            |                                               ^~~~
      
      Axel SpoerlA Offline
      Axel SpoerlA Offline
      Axel Spoerl
      Moderators
      wrote on last edited by
      #2

      @Kuzma30 said in Lost Wifi settings after reboot:
      Generally: Please format your code, using the respective functions in the menu.
      It makes things so much easier to read for those who want to help.

      and add in main
      wifiManager = new QNetworkSettingsManager(this);

      The parent argument thisdoesn't refer to anything, because main is not a class member.

      I don't know if this is the reason for loosing / not restoring the WiFi settings.
      It's documented here, how to obtain the name of the settings file.

      Software Engineer
      The Qt Company, Oslo

      1 Reply Last reply
      0
      • K Offline
        K Offline
        Kuzma30
        wrote on last edited by
        #3

        I add this code to my class for system parameters

        class MySystem : public QObject
        {
            Q_OBJECT
        ....
        Q_PROPERTY 
        ......
        public:
            void connectWiFi()
                {
                    auto wifiManager = new QNetworkSettingsManager(this);
                    QString ssid = "mySSID";
                    QString password = "myPassword";
                    wifiManager->connectBySsid(ssid,password);
                }
        

        and get error during linking

        :-1: error: CMakeFiles/Ferti.dir/main.cpp.o: in function MySystem::connectWiFi()': /home/qtemb/FertiGUI/cpp/MySystem/mysystem.h:-1: error: undefined reference to QNetworkSettingsManager::QNetworkSettingsManager(QObject*)'
        :-1: error: /home/qtemb/FertiGUI/cpp/MySystem/mysystem.h:47:(.text._ZN8MySystem11connectWiFiEv[_ZN8MySystem11connectWiFiEv]+0x58): undefined reference to `QNetworkSettingsManager::connectBySsid(QString const&, QString const&)'

        JoeCFDJ 1 Reply Last reply
        0
        • K Kuzma30

          I add this code to my class for system parameters

          class MySystem : public QObject
          {
              Q_OBJECT
          ....
          Q_PROPERTY 
          ......
          public:
              void connectWiFi()
                  {
                      auto wifiManager = new QNetworkSettingsManager(this);
                      QString ssid = "mySSID";
                      QString password = "myPassword";
                      wifiManager->connectBySsid(ssid,password);
                  }
          

          and get error during linking

          :-1: error: CMakeFiles/Ferti.dir/main.cpp.o: in function MySystem::connectWiFi()': /home/qtemb/FertiGUI/cpp/MySystem/mysystem.h:-1: error: undefined reference to QNetworkSettingsManager::QNetworkSettingsManager(QObject*)'
          :-1: error: /home/qtemb/FertiGUI/cpp/MySystem/mysystem.h:47:(.text._ZN8MySystem11connectWiFiEv[_ZN8MySystem11connectWiFiEv]+0x58): undefined reference to `QNetworkSettingsManager::connectBySsid(QString const&, QString const&)'

          JoeCFDJ Offline
          JoeCFDJ Offline
          JoeCFD
          wrote on last edited by JoeCFD
          #4

          @Kuzma30 said in Lost Wifi settings after reboot:

          QNetworkSettingsManager

          You can not find the class QNetworkSettingsManager From here
          https://doc.qt.io/qt-6/classes.html
          Was it dropped in Qt6? I guess you are running Qt6 example.
          What are your Qt version and OS?

          K 1 Reply Last reply
          0
          • JoeCFDJ JoeCFD

            @Kuzma30 said in Lost Wifi settings after reboot:

            QNetworkSettingsManager

            You can not find the class QNetworkSettingsManager From here
            https://doc.qt.io/qt-6/classes.html
            Was it dropped in Qt6? I guess you are running Qt6 example.
            What are your Qt version and OS?

            K Offline
            K Offline
            Kuzma30
            wrote on last edited by
            #5

            @JoeCFD said in Lost Wifi settings after reboot:

            QNetworkSettingsManager

            Qt 6.7.0 (boot2qt distro), OS linux

            Axel SpoerlA 1 Reply Last reply
            0
            • K Kuzma30

              @JoeCFD said in Lost Wifi settings after reboot:

              QNetworkSettingsManager

              Qt 6.7.0 (boot2qt distro), OS linux

              Axel SpoerlA Offline
              Axel SpoerlA Offline
              Axel Spoerl
              Moderators
              wrote on last edited by
              #6

              @Kuzma30
              But there's no QNetworkSettingsManagerin 6.7....

              Software Engineer
              The Qt Company, Oslo

              K 1 Reply Last reply
              0
              • Axel SpoerlA Axel Spoerl

                @Kuzma30
                But there's no QNetworkSettingsManagerin 6.7....

                K Offline
                K Offline
                Kuzma30
                wrote on last edited by
                #7

                @Axel-Spoerl
                Agree (I don't know from where I get this files in my bsp). Now I rolling back to 6.6.
                How to connect to WiFI nbetwork with SSID and password in v6.6?

                Axel SpoerlA 1 Reply Last reply
                0
                • K Kuzma30

                  @Axel-Spoerl
                  Agree (I don't know from where I get this files in my bsp). Now I rolling back to 6.6.
                  How to connect to WiFI nbetwork with SSID and password in v6.6?

                  Axel SpoerlA Offline
                  Axel SpoerlA Offline
                  Axel Spoerl
                  Moderators
                  wrote on last edited by
                  #8

                  @Kuzma30
                  It was removed.
                  The reason, in a nutshell, is that the OS typically takes care of that and an application shouldn't manage its own network settings.

                  Software Engineer
                  The Qt Company, Oslo

                  K 1 Reply Last reply
                  0
                  • Axel SpoerlA Axel Spoerl

                    @Kuzma30
                    It was removed.
                    The reason, in a nutshell, is that the OS typically takes care of that and an application shouldn't manage its own network settings.

                    K Offline
                    K Offline
                    Kuzma30
                    wrote on last edited by
                    #9

                    @Axel-Spoerl
                    But this code works in QML 6.6 (Set button for enter password for SSID)

                                    QtButton{
                                        id: setButton
                                        text: qsTr("SET")
                                        height: GUIParam.dialogButtonSize
                                        onClicked: {
                                            if (showSsid) {
                                                NetworkSettingsManager.connectBySsid(ssidField.text, passField.text)
                                                showSsid = false
                                            } else {
                                                NetworkSettingsManager.userAgent.setPassphrase(passField.text)
                                            }
                                            passphrasePopup.visible = false;
                                        }
                                    }
                    
                    Axel SpoerlA 1 Reply Last reply
                    0
                    • K Kuzma30

                      @Axel-Spoerl
                      But this code works in QML 6.6 (Set button for enter password for SSID)

                                      QtButton{
                                          id: setButton
                                          text: qsTr("SET")
                                          height: GUIParam.dialogButtonSize
                                          onClicked: {
                                              if (showSsid) {
                                                  NetworkSettingsManager.connectBySsid(ssidField.text, passField.text)
                                                  showSsid = false
                                              } else {
                                                  NetworkSettingsManager.userAgent.setPassphrase(passField.text)
                                              }
                                              passphrasePopup.visible = false;
                                          }
                                      }
                      
                      Axel SpoerlA Offline
                      Axel SpoerlA Offline
                      Axel Spoerl
                      Moderators
                      wrote on last edited by
                      #10

                      @Kuzma30
                      Can you post a screenshot of what it does, when it runs?

                      Software Engineer
                      The Qt Company, Oslo

                      K 1 Reply Last reply
                      0
                      • Axel SpoerlA Axel Spoerl

                        @Kuzma30
                        Can you post a screenshot of what it does, when it runs?

                        K Offline
                        K Offline
                        Kuzma30
                        wrote on last edited by
                        #11

                        @Axel-Spoerl
                        img1.jpg img2.jpg img3.jpg img4.jpg

                        I make photo of procedure connecting to WiFi in my app. User can't access to system parameters.

                        1 Reply Last reply
                        0
                        • K Offline
                          K Offline
                          Kuzma30
                          wrote on last edited by
                          #12

                          I am trying auto connect to wifi when main window loaded from ssid andd pass

                              Component.onCompleted: {
                                  console.log("Check WiFi param")
                                  var ssid = param.getParameterValue("WIFI_SSID")
                          
                                  if (ssid !== "none") {
                                      console.log("Power On WiFi")
                                      for (var i = 0; NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i) !== null; i++) {
                                          var wifiInterface = NetworkSettingsManager.interface(NetworkSettingsType.Wifi, 0);
                                          wifiInterface.powered = true;
                                          pauseWiFi.start()
                                          console.log("power on")
                                      }
                                      NetworkSettingsManager.interfacesChanged();
                                      wifiSwitchTimer.start();
                                  }
                              }
                              Timer {
                                  id: pauseWiFi
                                  interval: 1000
                                  running: false
                              }
                              Timer {
                                  id: wifiSwitchTimer
                                  interval: 5000
                                  running: false
                                  onTriggered: {
                                      var ssid = param.getParameterValue("WIFI_SSID")
                          
                                      var pass = param.getParameterValue("WIFI_PASSWORD")
                          
                                      console.log("Connecting to WiFi " + ssid)
                                      NetworkSettingsManager.connectBySsid(ssid, pass)
                                  }
                              }
                          

                          But I get error

                          Tried to scan while not powered
                          
                          K 1 Reply Last reply
                          0
                          • K Kuzma30

                            I am trying auto connect to wifi when main window loaded from ssid andd pass

                                Component.onCompleted: {
                                    console.log("Check WiFi param")
                                    var ssid = param.getParameterValue("WIFI_SSID")
                            
                                    if (ssid !== "none") {
                                        console.log("Power On WiFi")
                                        for (var i = 0; NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i) !== null; i++) {
                                            var wifiInterface = NetworkSettingsManager.interface(NetworkSettingsType.Wifi, 0);
                                            wifiInterface.powered = true;
                                            pauseWiFi.start()
                                            console.log("power on")
                                        }
                                        NetworkSettingsManager.interfacesChanged();
                                        wifiSwitchTimer.start();
                                    }
                                }
                                Timer {
                                    id: pauseWiFi
                                    interval: 1000
                                    running: false
                                }
                                Timer {
                                    id: wifiSwitchTimer
                                    interval: 5000
                                    running: false
                                    onTriggered: {
                                        var ssid = param.getParameterValue("WIFI_SSID")
                            
                                        var pass = param.getParameterValue("WIFI_PASSWORD")
                            
                                        console.log("Connecting to WiFi " + ssid)
                                        NetworkSettingsManager.connectBySsid(ssid, pass)
                                    }
                                }
                            

                            But I get error

                            Tried to scan while not powered
                            
                            K Offline
                            K Offline
                            Kuzma30
                            wrote on last edited by
                            #13

                            Updated code. More progress.

                                Component.onCompleted: {
                                    NetworkSettingsManager.interfacesChanged()
                                    pauseWiFi.start()
                                }
                                Timer {
                                    id: pauseWiFi
                                    interval: 3000
                                    running: false
                                    onTriggered: {
                                        NetworkSettingsManager.services.type = NetworkSettingsType.Wifi;
                                        console.log("Check WiFi param")
                                        var ssid = param.getParameterValue("WIFI_SSID")
                            
                                        if (ssid !== "none") {
                                            console.log("Power On WiFi")
                                            //sc.setWiFiOn()
                            
                                            for (var i = 0; NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i) !== null; i++) {
                                                console.log("i="+i)
                                                var wifiInterface = NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i);
                                                wifiInterface.powered = true;
                            
                                                console.log("power on")
                                            }
                            
                                        }
                                        wifiSwitchTimer.start();
                                    }
                                }
                                Timer {
                                    id: wifiSwitchTimer
                                    interval: 5000
                                    running: false
                                    onTriggered: {
                                        var ssid = param.getParameterValue("WIFI_SSID")
                            
                                        var pass = param.getParameterValue("WIFI_PASSWORD")
                            
                                        console.log("Connecting to WiFi  \""+ ssid + "\"")
                            
                                        NetworkSettingsManager.userAgent.setPassphrase(pass)
                                        NetworkSettingsManager.connectBySsid(ssid, pass)
                                        NetworkSettingsManager.interfacesChanged()
                                    }
                                }
                            

                            Now program poweron WiFi, NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i) != null.
                            But result of connectBySsid() with correct ssid and pass - powered on WiFi but without connection.
                            I try code with and without NetworkSettingsManager.interfacesChanged() in the end. Same results.

                            K 1 Reply Last reply
                            0
                            • K Kuzma30

                              Updated code. More progress.

                                  Component.onCompleted: {
                                      NetworkSettingsManager.interfacesChanged()
                                      pauseWiFi.start()
                                  }
                                  Timer {
                                      id: pauseWiFi
                                      interval: 3000
                                      running: false
                                      onTriggered: {
                                          NetworkSettingsManager.services.type = NetworkSettingsType.Wifi;
                                          console.log("Check WiFi param")
                                          var ssid = param.getParameterValue("WIFI_SSID")
                              
                                          if (ssid !== "none") {
                                              console.log("Power On WiFi")
                                              //sc.setWiFiOn()
                              
                                              for (var i = 0; NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i) !== null; i++) {
                                                  console.log("i="+i)
                                                  var wifiInterface = NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i);
                                                  wifiInterface.powered = true;
                              
                                                  console.log("power on")
                                              }
                              
                                          }
                                          wifiSwitchTimer.start();
                                      }
                                  }
                                  Timer {
                                      id: wifiSwitchTimer
                                      interval: 5000
                                      running: false
                                      onTriggered: {
                                          var ssid = param.getParameterValue("WIFI_SSID")
                              
                                          var pass = param.getParameterValue("WIFI_PASSWORD")
                              
                                          console.log("Connecting to WiFi  \""+ ssid + "\"")
                              
                                          NetworkSettingsManager.userAgent.setPassphrase(pass)
                                          NetworkSettingsManager.connectBySsid(ssid, pass)
                                          NetworkSettingsManager.interfacesChanged()
                                      }
                                  }
                              

                              Now program poweron WiFi, NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i) != null.
                              But result of connectBySsid() with correct ssid and pass - powered on WiFi but without connection.
                              I try code with and without NetworkSettingsManager.interfacesChanged() in the end. Same results.

                              K Offline
                              K Offline
                              Kuzma30
                              wrote on last edited by
                              #14

                              Final code, that working for me

                                 Component.onCompleted: {
                                      NetworkSettingsManager.interfacesChanged()
                                      pauseWiFi.start()
                                  }
                                  Timer {
                                      id: pauseWiFi
                                      interval: 3000
                                      running: false
                                      onTriggered: {
                                          NetworkSettingsManager.services.type = NetworkSettingsType.Wifi;
                                          console.log("Check WiFi param")
                                          var ssid = param.getParameterValue("WIFI_SSID")
                              
                                          if (ssid !== "none") {
                                              console.log("Power On WiFi")
                                              for (var i = 0; NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i) !== null; i++) {
                                                  console.log("i="+i)
                                                  var wifiInterface = NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i);
                                                  wifiInterface.powered = true;
                              
                                                  console.log("power on")
                                              }
                              
                                          }
                                          wifiSwitchTimer.start();
                                      }
                                  }
                                  property var connectingService: null
                                  Timer {
                                      id: wifiSwitchTimer
                                      interval: 5000
                                      running: false
                                      onTriggered: {
                                          var ssid = param.getParameterValue("WIFI_SSID")
                              
                                          var pass = param.getParameterValue("WIFI_PASSWORD")
                              
                                          console.log("Connecting to WiFi  \""+ ssid + "\"")
                              
                                          for (var index = 0; index < 10; index++) {
                                              if (NetworkSettingsManager.services.itemFromRow(index).name===ssid){
                                                  console.log("Found SSID at index = "+ index)
                                                  root.connectingService = NetworkSettingsManager.services.itemFromRow(index)
                                              }
                                          }
                                          root.connectingService.connectService();
                                          NetworkSettingsManager.userAgent.setPassphrase(pass)
                                          vpntimer.start();
                                      }
                              
                                  }
                                      Timer{
                                          id: vpntimer
                                          interval: 5000
                                          running: false
                                           onTriggered: {
                                               console.log("Start VPN")
                                               processWrapper.executeCommand("systemctl start openvpn-client@client")
                                           }
                                      }
                              
                              
                              1 Reply Last reply
                              0

                              • Login

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