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.

Line Count in my Qt Project.

Scheduled Pinned Locked Moved Solved General and Desktop
25 Posts 10 Posters 17.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.
  • J.HilkJ Offline
    J.HilkJ Offline
    J.Hilk
    Moderators
    wrote on last edited by
    #11

    This is as good of a reason as it gets to write a small program, that does the work for you.

    Recursively opening your source file folder and counting how often QIODevice::readline can be called.

    Shouldn't take more than a few minutes to do.


    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
    1
    • 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

                If you meet the AI on the road, kill it.

                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

                            If you meet the AI on the road, kill it.

                            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