Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. Kleines Verständnisproblem mit vector <QString> und push_back
Forum Updated to NodeBB v4.3 + New Features

Kleines Verständnisproblem mit vector <QString> und push_back

Scheduled Pinned Locked Moved Unsolved German
5 Posts 3 Posters 564 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.
  • M Offline
    M Offline
    MHage
    wrote on last edited by
    #1

    Hallo,

    Worum es geht: ich lese eine Textdatei ein, in der Zeilenweise Befehle stehen, samt parameter.
    Diese sollen nun Zeilenweise untersucht werden, um ggf. Befehle auszutauschen.

    Das folgende ist nicht ganz zusammenhängend, erklärt aber die Definition.

    QString tokens = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
      QString command = originalCommand;                    //used for splitting commands into component parts
      QVector<QString> items {};                            //component parts
      QString subString = "";                               //scratchpad
      int gcode = 0;
      int numChars;
      int index;
    
    index = command.indexOf("M");
      if (index==0) {
        SuppressOutputFlag = true;
      }
    
      // ----- insert the required M3(pen_up) and M5(pen_down) code sequences
      index = command.indexOf("G");
      if (index==0) {
    
        // ---- identify the G-code command
        numChars = command.length();
        subString = command.mid(index, numChars);           //keep everything after the "match"
        items.push_back(subString.split(tokens));           //split string at each non-digit character
        gcode = items.at(0).toInt();                        //item[0] contains the "match" value
    
    

    Bei der vorletzten Zeile: items.push_back bekomme ich dann folgenden Fehler:

    mainwindow.cpp:112: Fehler: no matching function for call to ‘QVector<QString>::push_back(QStringList)’
    ../GCodePostProcessor/mainwindow.cpp: In member function ‘void MainWindow::process(QTextStream&, QString)’:
    ../GCodePostProcessor/mainwindow.cpp:112:44: error: no matching function for call to ‘QVector<QString>::push_back(QStringList)’
      112 |     items.push_back(subString.split(tokens));           //split string at each non-digit character
          |                                            ^
    

    Irgendwie verstehe ich nicht, was da falsch läuft. Warum kann ich keinen QString in einen vector <QString> schreiben?

    VG
    Matze

    JonBJ S 2 Replies Last reply
    0
    • M MHage

      Hallo,

      Worum es geht: ich lese eine Textdatei ein, in der Zeilenweise Befehle stehen, samt parameter.
      Diese sollen nun Zeilenweise untersucht werden, um ggf. Befehle auszutauschen.

      Das folgende ist nicht ganz zusammenhängend, erklärt aber die Definition.

      QString tokens = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
        QString command = originalCommand;                    //used for splitting commands into component parts
        QVector<QString> items {};                            //component parts
        QString subString = "";                               //scratchpad
        int gcode = 0;
        int numChars;
        int index;
      
      index = command.indexOf("M");
        if (index==0) {
          SuppressOutputFlag = true;
        }
      
        // ----- insert the required M3(pen_up) and M5(pen_down) code sequences
        index = command.indexOf("G");
        if (index==0) {
      
          // ---- identify the G-code command
          numChars = command.length();
          subString = command.mid(index, numChars);           //keep everything after the "match"
          items.push_back(subString.split(tokens));           //split string at each non-digit character
          gcode = items.at(0).toInt();                        //item[0] contains the "match" value
      
      

      Bei der vorletzten Zeile: items.push_back bekomme ich dann folgenden Fehler:

      mainwindow.cpp:112: Fehler: no matching function for call to ‘QVector<QString>::push_back(QStringList)’
      ../GCodePostProcessor/mainwindow.cpp: In member function ‘void MainWindow::process(QTextStream&, QString)’:
      ../GCodePostProcessor/mainwindow.cpp:112:44: error: no matching function for call to ‘QVector<QString>::push_back(QStringList)’
        112 |     items.push_back(subString.split(tokens));           //split string at each non-digit character
            |                                            ^
      

      Irgendwie verstehe ich nicht, was da falsch läuft. Warum kann ich keinen QString in einen vector <QString> schreiben?

      VG
      Matze

      JonBJ Online
      JonBJ Online
      JonB
      wrote on last edited by
      #2

      @MHage said in Kleines Verständnisproblem mit vector <QString> und push_back:

      Warum kann ich keinen QString in einen vector <QString> schreiben?

      Weil subString.split(tokens) ein QStringList und kein QString gebt.

      error: no matching function for call to ‘QVector<QString>::push_back(QStringList)’

      push_back(QString) erlaubt ist, aber nicht push_back(QStringList).

      1 Reply Last reply
      2
      • M MHage

        Hallo,

        Worum es geht: ich lese eine Textdatei ein, in der Zeilenweise Befehle stehen, samt parameter.
        Diese sollen nun Zeilenweise untersucht werden, um ggf. Befehle auszutauschen.

        Das folgende ist nicht ganz zusammenhängend, erklärt aber die Definition.

        QString tokens = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
          QString command = originalCommand;                    //used for splitting commands into component parts
          QVector<QString> items {};                            //component parts
          QString subString = "";                               //scratchpad
          int gcode = 0;
          int numChars;
          int index;
        
        index = command.indexOf("M");
          if (index==0) {
            SuppressOutputFlag = true;
          }
        
          // ----- insert the required M3(pen_up) and M5(pen_down) code sequences
          index = command.indexOf("G");
          if (index==0) {
        
            // ---- identify the G-code command
            numChars = command.length();
            subString = command.mid(index, numChars);           //keep everything after the "match"
            items.push_back(subString.split(tokens));           //split string at each non-digit character
            gcode = items.at(0).toInt();                        //item[0] contains the "match" value
        
        

        Bei der vorletzten Zeile: items.push_back bekomme ich dann folgenden Fehler:

        mainwindow.cpp:112: Fehler: no matching function for call to ‘QVector<QString>::push_back(QStringList)’
        ../GCodePostProcessor/mainwindow.cpp: In member function ‘void MainWindow::process(QTextStream&, QString)’:
        ../GCodePostProcessor/mainwindow.cpp:112:44: error: no matching function for call to ‘QVector<QString>::push_back(QStringList)’
          112 |     items.push_back(subString.split(tokens));           //split string at each non-digit character
              |                                            ^
        

        Irgendwie verstehe ich nicht, was da falsch läuft. Warum kann ich keinen QString in einen vector <QString> schreiben?

        VG
        Matze

        S Offline
        S Offline
        SimonSchroeder
        wrote on last edited by
        #3

        Es würde möglicherweise mit append() anstatt push_back() funktionieren. Das würde allerdings voraussetzen, dass QStringList in QVector<QString> konvertiert werden kann. Ansonsten bleibt nur, dass du QStringList direkt für items verwendest.

        Ich möche auch darauf hinweisen, dass subString.split(tokens) nicht das tut, was du denkst. Denn in dieser Variante von split() sucht es nach dem Substring tokens, d.h. einem Substring mit dem vollständigen Alphabet inklusive der Kommas, und trennt an dieser Stelle auf. Es ist nicht so, dass an beliebigen Tokens aus dem langen Tokenstring gesplittet wird. Stattdessen müssen hier Regular Expressions verwendet werden.

        M 1 Reply Last reply
        0
        • S SimonSchroeder

          Es würde möglicherweise mit append() anstatt push_back() funktionieren. Das würde allerdings voraussetzen, dass QStringList in QVector<QString> konvertiert werden kann. Ansonsten bleibt nur, dass du QStringList direkt für items verwendest.

          Ich möche auch darauf hinweisen, dass subString.split(tokens) nicht das tut, was du denkst. Denn in dieser Variante von split() sucht es nach dem Substring tokens, d.h. einem Substring mit dem vollständigen Alphabet inklusive der Kommas, und trennt an dieser Stelle auf. Es ist nicht so, dass an beliebigen Tokens aus dem langen Tokenstring gesplittet wird. Stattdessen müssen hier Regular Expressions verwendet werden.

          M Offline
          M Offline
          MHage
          wrote on last edited by
          #4

          @SimonSchroeder

          Mit dem Thema "subString.split(tokens)" bin ich auch noch nicht ganz durch. Du hast recht, es tut nicht wirklich das, was ich erwartet habe.

          Im Moment sieht das bei mir so aus:

              QString tokens = "A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z";
              QString command = originalCommand;                  //used for splitting commands into component parts
              QStringList l;                                      //component parts
              QString subString = "";                             //scratchpad
              int gcode = 0;
              int numChars;
              int index;
          
          
          
          // ---- identify the G-code command
                  numChars = command.length();
                  subString = command.mid(index, numChars);       //keep everything after the "match"
                  l = subString.split(QRegExp(tokens));           //split string at each non-digit character
                  gcode = l.at(1).toInt();                        //item[0] contains the "match" value
          
          

          Das funktioniert zwar, aber nicht ganz so, wie ich es ursprünglich angedacht hatte...

          S 1 Reply Last reply
          0
          • M MHage

            @SimonSchroeder

            Mit dem Thema "subString.split(tokens)" bin ich auch noch nicht ganz durch. Du hast recht, es tut nicht wirklich das, was ich erwartet habe.

            Im Moment sieht das bei mir so aus:

                QString tokens = "A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z";
                QString command = originalCommand;                  //used for splitting commands into component parts
                QStringList l;                                      //component parts
                QString subString = "";                             //scratchpad
                int gcode = 0;
                int numChars;
                int index;
            
            
            
            // ---- identify the G-code command
                    numChars = command.length();
                    subString = command.mid(index, numChars);       //keep everything after the "match"
                    l = subString.split(QRegExp(tokens));           //split string at each non-digit character
                    gcode = l.at(1).toInt();                        //item[0] contains the "match" value
            
            

            Das funktioniert zwar, aber nicht ganz so, wie ich es ursprünglich angedacht hatte...

            S Offline
            S Offline
            SimonSchroeder
            wrote on last edited by
            #5

            Ein bisschen einfacher geht es mit QString tokens = "[A-Z]";.

            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