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.
Forum Updated to NodeBB v4.3 + New Features

Line Count in my Qt Project.

Scheduled Pinned Locked Moved Solved General and Desktop
25 Posts 10 Posters 16.4k 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 Online
    J.HilkJ Online
    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 Online
        J.HilkJ Online
        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 Online
            J.HilkJ Online
            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

                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

                            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