Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Line Count in my Qt Project.
Qt 6.11 is out! See what's new in the release blog

Line Count in my Qt Project.

Scheduled Pinned Locked Moved Solved General and Desktop
25 Posts 10 Posters 22.9k Views 4 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.
  • Pradeep P NP Pradeep P N

    @jsulm Can you please give me more details on sloccount and how can i use it with Qt

    mrjjM Offline
    mrjjM Offline
    mrjj
    Lifetime Qt Champion
    wrote on last edited by
    #12

    @Pradeep-P-N

    sloccount topmost-source-code-directory
    so like
    sloccount c:\projects\testproject

    https://www.dwheeler.com/sloccount/sloccount.html

    1 Reply Last reply
    1
    • J.HilkJ Offline
      J.HilkJ Offline
      J.Hilk
      Moderators
      wrote on last edited by
      #13

      I had some time during breakfast :-)

      #include <QCoreApplication>
      #include <QDir>
      #include <QFile>
      #include <QTextStream>
      #include <QVector>
      
      int countLines(QString path){
          QFile f(path);
          int cnt = 0;
      
          if(f.open(QIODevice::ReadOnly | QIODevice::Text)){
              QTextStream read(&f);
              while(!read.atEnd()){
                  read.readLine();
                  cnt++;
              }
          }
          f.close();
          return cnt;
      }
      
      int parseDir(QString path){
          int cnt = 0;
          QDir dir(path);
          QStringList dirs = dir.entryList(QDir::AllDirs |QDir::NoDotAndDotDot);
          QStringList file = dir.entryList(QDir::Files);
          for(QString dir : dirs){
                  cnt += parseDir(path + "/"+dir);
          }
      
          for(QString s : file){
              if(s.splitRef('.').last() == "h" || s.splitRef('.').last() == "cpp")
                  cnt += countLines(path + "/"+s);
          }
      
          return cnt;
      }
      
      int main(int argc, char *argv[])
      {
          QCoreApplication a(argc, argv);
      
          int count = 0;
      
          count += PathDir(a.arguments().last());
      
          QTextStream out(stdout);
          out << "Lines in project: " << a.arguments().last() << ": "<< endl <<count << endl;
      
          return a.exec();
      }
      

      Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


      Q: What's that?
      A: It's blue light.
      Q: What does it do?
      A: It turns blue.

      jsulmJ 1 Reply Last reply
      6
      • J.HilkJ J.Hilk

        I had some time during breakfast :-)

        #include <QCoreApplication>
        #include <QDir>
        #include <QFile>
        #include <QTextStream>
        #include <QVector>
        
        int countLines(QString path){
            QFile f(path);
            int cnt = 0;
        
            if(f.open(QIODevice::ReadOnly | QIODevice::Text)){
                QTextStream read(&f);
                while(!read.atEnd()){
                    read.readLine();
                    cnt++;
                }
            }
            f.close();
            return cnt;
        }
        
        int parseDir(QString path){
            int cnt = 0;
            QDir dir(path);
            QStringList dirs = dir.entryList(QDir::AllDirs |QDir::NoDotAndDotDot);
            QStringList file = dir.entryList(QDir::Files);
            for(QString dir : dirs){
                    cnt += parseDir(path + "/"+dir);
            }
        
            for(QString s : file){
                if(s.splitRef('.').last() == "h" || s.splitRef('.').last() == "cpp")
                    cnt += countLines(path + "/"+s);
            }
        
            return cnt;
        }
        
        int main(int argc, char *argv[])
        {
            QCoreApplication a(argc, argv);
        
            int count = 0;
        
            count += PathDir(a.arguments().last());
        
            QTextStream out(stdout);
            out << "Lines in project: " << a.arguments().last() << ": "<< endl <<count << endl;
        
            return a.exec();
        }
        
        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #14

        @J.Hilk Well, it is a bit more complex :-) For example your version counts empty lines and comment lines.

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        J.HilkJ 1 Reply Last reply
        2
        • jsulmJ jsulm

          @J.Hilk Well, it is a bit more complex :-) For example your version counts empty lines and comment lines.

          J.HilkJ Offline
          J.HilkJ Offline
          J.Hilk
          Moderators
          wrote on last edited by
          #15

          @jsulm well obviously :-P
          but that could be addressed e.g:

          int countLines(QString path){
              QFile f(path);
              int cnt = 0;
          
              if(f.open(QIODevice::ReadOnly | QIODevice::Text)){
                  QTextStream read(&f);
                  QString line;
                  bool comment = false;
                  while(!read.atEnd()){
                      line = read.readLine();
                      line = line.simplified();
                      line.replace(" ","");
                      if(line.size() >0){
                          if(line.leftRef(2) != "//"){
                              if(line.contains("/*"))
                                  comment = true;
                              if(line.contains("*/"))
                                  comment = false;
                              if(!comment)
                                  cnt++;
                          }
                      }
                  }
              }
              f.close();
              return cnt;
          }
          

          Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


          Q: What's that?
          A: It's blue light.
          Q: What does it do?
          A: It turns blue.

          1 Reply Last reply
          2
          • Pradeep P NP Offline
            Pradeep P NP Offline
            Pradeep P N
            wrote on last edited by
            #16

            Thanks All for the help.
            Moving to solved.

            Pradeep Nimbalkar.
            Upvote the answer(s) that helped you to solve the issue...
            Keep code clean.

            1 Reply Last reply
            2
            • Kent-DorfmanK Offline
              Kent-DorfmanK Offline
              Kent-Dorfman
              wrote on last edited by
              #17

              find and grep...find and grep

              The dystopian literature that served as a warning in my youth has become an instruction manual in my elder years.

              aha_1980A 1 Reply Last reply
              0
              • Kent-DorfmanK Kent-Dorfman

                find and grep...find and grep

                aha_1980A Offline
                aha_1980A Offline
                aha_1980
                Lifetime Qt Champion
                wrote on last edited by
                #18

                @Kent-Dorfman would you like to elaborate a bit more?

                Qt has to stay free or it will die.

                1 Reply Last reply
                2
                • W Offline
                  W Offline
                  wrosecrans
                  wrote on last edited by
                  #19
                  find . -iname \*.h -o -iname \*.cpp -exec grep \\\; {} \; | wc -l
                  

                  Would find all the .h and .cpp find in the current directory, and count the number of lines with a semicolon. For the most things, that's probably a pretty useful count of code LOC, and requires no extra tools to be installed.

                  Pradeep P NP 1 Reply Last reply
                  1
                  • fcarneyF Offline
                    fcarneyF Offline
                    fcarney
                    wrote on last edited by
                    #20

                    Is this for some kind of line-counting match?

                    C++ is a perfectly valid school of magic.

                    1 Reply Last reply
                    0
                    • W wrosecrans
                      find . -iname \*.h -o -iname \*.cpp -exec grep \\\; {} \; | wc -l
                      

                      Would find all the .h and .cpp find in the current directory, and count the number of lines with a semicolon. For the most things, that's probably a pretty useful count of code LOC, and requires no extra tools to be installed.

                      Pradeep P NP Offline
                      Pradeep P NP Offline
                      Pradeep P N
                      wrote on last edited by
                      #21

                      @wrosecrans
                      This don't do the folder search recursive right. ?

                      Pradeep Nimbalkar.
                      Upvote the answer(s) that helped you to solve the issue...
                      Keep code clean.

                      aha_1980A 1 Reply Last reply
                      1
                      • Pradeep P NP Pradeep P N

                        @wrosecrans
                        This don't do the folder search recursive right. ?

                        aha_1980A Offline
                        aha_1980A Offline
                        aha_1980
                        Lifetime Qt Champion
                        wrote on last edited by
                        #22

                        @Pradeep-P-N

                        I have not tested this code, but find is recursive so it should work.

                        Regards

                        Qt has to stay free or it will die.

                        1 Reply Last reply
                        1
                        • Kent-DorfmanK Offline
                          Kent-DorfmanK Offline
                          Kent-Dorfman
                          wrote on last edited by Kent-Dorfman
                          #23

                          yes, the default behaviour of find "in unix" is recursive. grep is a pattern matcher. I use

                          find . -type f -iname \*.h -o -iname \*.hpp -o \
                          -iname \*.c -o -iname \*.cc -o -iname \*.cxx \
                          -o -iname \*.cpp | \
                          xargs -n 1 egrep -v "^[ \t]*$" | wc -l
                          

                          prints total of all target file lines (found recursively). ignores blank lines

                          The dystopian literature that served as a warning in my youth has become an instruction manual in my elder years.

                          Pradeep P NP 1 Reply Last reply
                          0
                          • Kent-DorfmanK Kent-Dorfman

                            yes, the default behaviour of find "in unix" is recursive. grep is a pattern matcher. I use

                            find . -type f -iname \*.h -o -iname \*.hpp -o \
                            -iname \*.c -o -iname \*.cc -o -iname \*.cxx \
                            -o -iname \*.cpp | \
                            xargs -n 1 egrep -v "^[ \t]*$" | wc -l
                            

                            prints total of all target file lines (found recursively). ignores blank lines

                            Pradeep P NP Offline
                            Pradeep P NP Offline
                            Pradeep P N
                            wrote on last edited by
                            #24

                            Hi @Kent-Dorfman
                            Cool, Linux commands are always awesome.
                            I just Added *.qml to the command so i can include qml also for the line count.

                            find . -type f -iname \*.h -o -iname \*.hpp -o -iname \*.qml -o \
                            -iname \*.c -o -iname \*.cc -o -iname \*.cxx \
                            -o -iname \*.cpp | \
                            xargs -n 1 egrep -v "^[ \t]*$" | wc -l
                            

                            Thanks a lot again
                            @mrjj @Eddy @jsulm @J-Hilk @Kent-Dorfman @aha_1980 @wrosecrans .

                            Have a great day.

                            Pradeep Nimbalkar.
                            Upvote the answer(s) that helped you to solve the issue...
                            Keep code clean.

                            1 Reply Last reply
                            5
                            • D Offline
                              D Offline
                              Dr. Abel
                              wrote on last edited by
                              #25

                              This tool will help you.
                              cloc-1.74.

                              It is collected in PyMake project.
                              github https://github.com/AbelTian/PyMake.git (fetch)
                              github https://github.com/AbelTian/PyMake.git (push)
                              origin https://gitee.com/drabel/PyMake (fetch)
                              origin https://gitee.com/drabel/PyMake (push)

                              In demo/ dir.

                              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