Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Update: Forum Guidelines & Code of Conduct

    Unsolved Kleines Verständnisproblem mit vector <QString> und push_back

    German
    3
    5
    209
    Loading More Posts
    • 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
      MHage last edited by

      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

      JonB S 2 Replies Last reply Reply Quote 0
      • JonB
        JonB @MHage last edited by

        @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 Reply Quote 2
        • S
          SimonSchroeder @MHage last edited by

          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 Reply Quote 0
          • M
            MHage @SimonSchroeder last edited by

            @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 Reply Quote 0
            • S
              SimonSchroeder @MHage last edited by

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

              1 Reply Last reply Reply Quote 0
              • First post
                Last post