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. Lagging window/gui when using realtime table view
Qt 6.11 is out! See what's new in the release blog

Lagging window/gui when using realtime table view

Scheduled Pinned Locked Moved Solved General and Desktop
26 Posts 4 Posters 6.0k Views 3 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 Mr Gisa

    @JKSH said in Lagging window/gui when using realtime table view:

    I'm guessing you meant: The program lags when resultAvailable() is emitted (which runs addResult()). In contrast, it doesn't lag if you simply print the Result object's data to the console (using printf() or std::cout or qDebug()) without emitting the signal.

    Exactly, sorry for the wrong description.

    Quick check: What happens if you don't link your model to the table view (comment out tableView->setModel(...)? Does the UI still lag?

    It doesn't lag at all.

    That is the entire model code:

    #include "resultsmodel.hpp"
    #include "result.hpp"
    
    ResultsModel::ResultsModel(QObject *parent) : QAbstractTableModel(parent)
    {
        // ...
    }
    
    int ResultsModel::rowCount(const QModelIndex &) const
    {
        return mResults.size();
    }
    
    int ResultsModel::columnCount(const QModelIndex &) const
    {
        return 5;
    }
    
    QVariant ResultsModel::data(const QModelIndex &index, int role) const
    {
        if (! index.isValid()) {
            return QVariant();
        }
    
        if (index.row() >= mResults.size() || index.row() < 0) {
            return QVariant();
        }
    
        auto result = mResults.at(index.row());
    
        if (role == Qt::DisplayRole) {
            switch (index.column()) {
            case 0:
                return result->filename().isEmpty() ? "?" : result->filename();
                break;
    
            case 1:
                return result->url();
                break;
    
            case 2:
                return result->source();
                break;
    
            case 3:
                return result->fileSize().isEmpty() ? "?" : result->fileSize();
                break;
    
            case 4:
                return result->isOnline() ? "Yes" : "No";
                break;
            }
        }
    
        return QVariant();
    }
    
    bool ResultsModel::setData(const QModelIndex &, const QVariant &, int)
    {
        return false;
    }
    
    QVariant ResultsModel::headerData(int section, Qt::Orientation orientation, int role) const
    {
        if (role != Qt::DisplayRole) {
            return QVariant();
        }
    
        if (orientation == Qt::Horizontal) {
            switch (section) {
            case 0:
                return tr("Filename");
                break;
    
            case 1:
                return tr("Url");
                break;
    
            case 2:
                return tr("Source");
                break;
    
            case 3:
                return tr("Size");
                break;
    
            case 4:
                return tr("Online");
                break;
    
            default:
                return QVariant();
                break;
            }
        }
    
        return QVariant();
    }
    
    Qt::ItemFlags ResultsModel::flags(const QModelIndex &index) const
    {
        if (! index.isValid()) {
            return Qt::ItemIsEnabled;
        }
    
        return QAbstractTableModel::flags(index);
    }
    
    void ResultsModel::addResult(Result *result)
    {
        if (mResults.contains(result)) {
            return;
        }
    
        auto index = mResults.size();
    
        beginInsertRows(QModelIndex(), index, index);
        mResults << result;
        endInsertRows();
    }
    
    void ResultsModel::reset()
    {
        beginResetModel();
        qDeleteAll(mResults.begin(), mResults.end());
        mResults.clear();
        endResetModel();
    }
    
    Christian EhrlicherC Online
    Christian EhrlicherC Online
    Christian Ehrlicher
    Lifetime Qt Champion
    wrote on last edited by
    #9

    @Mr-Gisa said in Lagging window/gui when using realtime table view:

    if (! index.isValid()) {
        return QVariant();
    }
    
    if (index.row() >= mResults.size() || index.row() < 0) {
        return QVariant();
    }
    
    auto result = mResults.at(index.row());
    

    And here I would first check for the role, then the bounds and at last for the validity since this is the most expensive operation here.

    Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
    Visit the Qt Academy at https://academy.qt.io/catalog

    1 Reply Last reply
    2
    • M Offline
      M Offline
      Mr Gisa
      wrote on last edited by
      #10

      @Christian-Ehrlicher I made the changes you pointed out and it helped a lot, it's still lagging, but way less than it was before. I can feel the gui freezing when trying to move, and as it's a lot of incoming data per second in the model you can really feel the lag in the gui.
      I think you know a software called Wireshark, it was made using Qt and their table receives A LOT (way more than mine) of packets information and it doesn't lag at all, but in my application I can feel the lag when I try to move the window around while the results are being displayed in the table.

      1 Reply Last reply
      0
      • Christian EhrlicherC Online
        Christian EhrlicherC Online
        Christian Ehrlicher
        Lifetime Qt Champion
        wrote on last edited by
        #11

        Another idea is to collect some results and add them once in a second (or every n seconds) instead every single one.

        Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
        Visit the Qt Academy at https://academy.qt.io/catalog

        1 Reply Last reply
        2
        • M Offline
          M Offline
          Mr Gisa
          wrote on last edited by Mr Gisa
          #12

          I realized something. When I compile in release mode and run the application out of the Qt, like running the actual executable it doesn't lag. Why is that?

          1 Reply Last reply
          0
          • Christian EhrlicherC Online
            Christian EhrlicherC Online
            Christian Ehrlicher
            Lifetime Qt Champion
            wrote on last edited by
            #13

            Because now the compiler don't need to generate debug information and compiles your code with optimizations.

            Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
            Visit the Qt Academy at https://academy.qt.io/catalog

            1 Reply Last reply
            2
            • M Offline
              M Offline
              Mr Gisa
              wrote on last edited by
              #14

              You think I should leave that way getting results at real time or do the batched thing? What is the best alternative here?

              mrjjM 1 Reply Last reply
              0
              • M Mr Gisa

                You think I should leave that way getting results at real time or do the batched thing? What is the best alternative here?

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

                @Mr-Gisa
                Since you are planning on even higher payloads, you should test if release mode
                can handle that or you simply need to batch them.

                1 Reply Last reply
                1
                • M Offline
                  M Offline
                  Mr Gisa
                  wrote on last edited by
                  #16

                  It will have on average 100 or 200 thousand results.

                  mrjjM 1 Reply Last reply
                  0
                  • M Mr Gisa

                    It will have on average 100 or 200 thousand results.

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

                    @Mr-Gisa
                    and are you testing with that many now?

                    1 Reply Last reply
                    0
                    • M Offline
                      M Offline
                      Mr Gisa
                      wrote on last edited by
                      #18

                      5~10 thousands, I can't get to 100~200 cause I have to code the other APIs, but with that it's working normally at this point.

                      mrjjM 1 Reply Last reply
                      0
                      • M Mr Gisa

                        5~10 thousands, I can't get to 100~200 cause I have to code the other APIs, but with that it's working normally at this point.

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

                        @Mr-Gisa
                        Ok, but you can postpone it until you have test data then and work on the other parts.

                        1 Reply Last reply
                        0
                        • M Offline
                          M Offline
                          Mr Gisa
                          wrote on last edited by
                          #20

                          Exactly, that is what I'm going to do. Thank you all for your help. If anything happen in the future I'll say it here.
                          I'm also going to get a copy with a friend of mine of his Intel Parallel Studio 2018 to check a few things in the application, I hope it works with Qt.

                          mrjjM 1 Reply Last reply
                          0
                          • M Mr Gisa

                            Exactly, that is what I'm going to do. Thank you all for your help. If anything happen in the future I'll say it here.
                            I'm also going to get a copy with a friend of mine of his Intel Parallel Studio 2018 to check a few things in the application, I hope it works with Qt.

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

                            @Mr-Gisa said in Lagging window/gui when using realtime table view:

                            Intel Parallel Studio 2018

                            Well its a compiler so good chance it can compile Qt.

                            1 Reply Last reply
                            0
                            • M Offline
                              M Offline
                              Mr Gisa
                              wrote on last edited by
                              #22

                              I'm not going to use the compiler, but the Intel® Inspector and Intel® VTune™ Amplifier.

                              Intel® Inspector: Memory and Thread Debugger
                              Intel® VTune™ Amplifier: Performance Profiler

                              mrjjM 1 Reply Last reply
                              0
                              • M Mr Gisa

                                I'm not going to use the compiler, but the Intel® Inspector and Intel® VTune™ Amplifier.

                                Intel® Inspector: Memory and Thread Debugger
                                Intel® VTune™ Amplifier: Performance Profiler

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

                                @Mr-Gisa
                                Ok, but can it do it without touching the source code?

                                1 Reply Last reply
                                0
                                • M Offline
                                  M Offline
                                  Mr Gisa
                                  wrote on last edited by
                                  #24

                                  Yes, but you can also specify the source code and it will show you the places that it has leaks and is slow, stuff like that.

                                  mrjjM 1 Reply Last reply
                                  0
                                  • M Mr Gisa

                                    Yes, but you can also specify the source code and it will show you the places that it has leaks and is slow, stuff like that.

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

                                    @Mr-Gisa
                                    Sounds really good. Never tested it.

                                    1 Reply Last reply
                                    0
                                    • M Offline
                                      M Offline
                                      Mr Gisa
                                      wrote on last edited by
                                      #26

                                      I recommend it, I'm not a pro using it but I could detect a lot of things in my code that helped me improve. Not in this one I mean, in other projects.I'm going to test using this one right now

                                      1 Reply Last reply
                                      1

                                      • Login

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular
                                      • Users
                                      • Groups
                                      • Search
                                      • Get Qt Extensions
                                      • Unsolved