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. Errors in EventLogger. This eventlogger is designed on Qt5 but having these errors in QT 6.2
Forum Updated to NodeBB v4.3 + New Features

Errors in EventLogger. This eventlogger is designed on Qt5 but having these errors in QT 6.2

Scheduled Pinned Locked Moved Solved General and Desktop
13 Posts 6 Posters 739 Views 1 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.
  • A Offline
    A Offline
    Aviral 0
    wrote on 1 Feb 2023, 13:12 last edited by
    #1

    Hi everyone! Hope you're well.
    I am trying to implement eventLogger in Qt 6.2 | The event logger code I have was made on QT 5 and have the errors. Please help me resolve it.

    #include "eventlogger.h"
    
    QEventLogger::QEventLogger(const QString & logFileBaseName,
                               QWidget * mainWidget,
                               bool screenshotsEnabled,
                               QObject * parent) : QObject(parent), mainWidget(mainWidget), screenshotsEnabled(screenshotsEnabled)
    {
        // Build log file name.
        QDateTime now = QDateTime::currentDateTime();
        QString fullLogFileName = logFileBaseName + " " + now.toString(Qt::ISODate).replace(":", "-") + ".csv";
    
        // Open log file.
        this->logFile = new QFile(fullLogFileName);
        if (!this->logFile->open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text))
            exit(1);
        this->log = new QTextStream(this->logFile);
    
        // Write header to log file.
        *log << "; Date and time are: " << now.toString(Qt::ISODate) << '\n';
        *log << "; Resolution: " << mainWidget->size().width() << 'x' << mainWidget->size().height() << '\n';
        *log << "time,input type,event type,target widget class,details\n";
        log->flush();
    
        // Create the dir in which screenshots will be stored, if requested.
        if (screenshotsEnabled) {
            screenshotDirName = "./screenshots " + now.toString(Qt::ISODate).replace(":", "-");
            qDebug() << QDir().mkdir(screenshotDirName);
        }
    
        // Start timer.
        this->time = new QTime();
        this->time->start();                             **No Member named start in QTime**
    }
    
    bool QEventLogger::eventFilter(QObject * obj, QEvent * event) {
        static QMouseEvent * mouseEvent;
        static QKeyEvent * keyEvent;
        static QHoverEvent * hoverEvent;
        static QFocusEvent * focusEvent;
        static QString eventType, details;
        static int inputType, mouseButton, modifierKey, id;
        static QString inputTypeAsString, className, targetWidget;
        inputType = NONE;
    
        inputTypeAsString = "";
    
        switch (event->type()) {
        case QEvent::MouseMove:
            inputType = MOUSE;
            eventType = "MouseMove";
            break;
        case QEvent::MouseTrackingChange:
            inputType = MOUSE;
            eventType = "MouseTrackingChange";
            break;
        case QEvent::MouseButtonPress:
            inputType = MOUSE;
            eventType = "MouseButtonPress";
            break;
        case QEvent::MouseButtonRelease:
            inputType = MOUSE;
            eventType = "MouseButtonRelease";
            break;
        case QEvent::MouseButtonDblClick:
            inputType = MOUSE;
            eventType = "MouseButtonDblClick";
            break;
        case QEvent::KeyPress:
            inputType = KEYBOARD;
            eventType = "KeyPress";
        case QEvent::KeyRelease:
            inputType = KEYBOARD;
            eventType = "KeyRelease";
            break;
        case QEvent::HoverEnter:
            inputType = HOVER;
            eventType = "HoverEnter";
            break;
        case QEvent::GraphicsSceneHoverEnter:
            inputType = HOVER;
            eventType = "GraphicsSceneHoverEnter";
            break;
        case QEvent::HoverLeave:
            inputType = HOVER;
            eventType = "HoverLeave";
            break;
        case QEvent::GraphicsSceneHoverLeave:
            inputType = HOVER;
            eventType = "GraphicsSceneHoverLeave";
            break;
        case QEvent::FocusIn:
            inputType = FOCUS;
            eventType = "FocusIn";
            break;
        case QEvent::FocusOut:
            inputType = FOCUS;
            eventType = "FocusOut";
            break;
        default:
            break;
        }
    
        if (inputType == MOUSE) {
            mouseEvent = static_cast<QMouseEvent *>(event);
    
            // Collect the mouse buttons that are pressed.
            mouseButton = mouseEvent->buttons();
            QString buttonsPressed;
            if (mouseButton & Qt::LeftButton)
                buttonsPressed += 'L';
            if (mouseButton & Qt::MiddleButton)
                buttonsPressed += 'M';
            if (mouseButton & Qt::RightButton)
                buttonsPressed += 'R';
    
            // Build the details string.
            details = "";
            details += QString::number(mouseEvent->x()) + ';' + QString::number(mouseEvent->y());
            details += ';' + buttonsPressed;
    
            inputTypeAsString = "Mouse";
        }
        else if (inputType == KEYBOARD) {
            keyEvent = static_cast<QKeyEvent *>(event);
    
            // Collect the modifier keys that are pressed.
            modifierKey = keyEvent->modifiers();
            QString modifierKeysPressed;
            if (modifierKey & Qt::ShiftModifier)
                modifierKeysPressed += ":shift";
            if (modifierKey & Qt::ControlModifier)
                modifierKeysPressed += ":ctrl";
            if (modifierKey & Qt::AltModifier)
                modifierKeysPressed += ":alt";
            if (modifierKey & Qt::MetaModifier)
                modifierKeysPressed += ":meta";
    
            // TODO: support special keys, such as ESC and arrow keys, when
            // keyEvent->text() == "".
    
            // Build the details string.
            details = "";
            details += QString::number(keyEvent->key());
            details += ';' + keyEvent->text();
            details += ';' + modifierKeysPressed;
    
            inputTypeAsString = "Keyboard";
        }
        else if (inputType == HOVER) {
            hoverEvent = static_cast<QHoverEvent *>(event);
    
            // qDebug() << hoverEvent << hoverEvent->pos() << obj->metaObject()->className() << obj->inherits("QWidget");
        }
        else if (inputType == FOCUS) {
            focusEvent = static_cast<QFocusEvent *>(event);
    
            // qDebug() << focusEvent << obj->metaObject()->className();
        }
    
        if (!inputTypeAsString.isEmpty()) {
            className = obj->metaObject()->className();
            if (!this->widgetPointerToID.contains(className) || !this->widgetPointerToID[className].contains(obj)) {
                this->widgetPointerToID[className][obj] = this->widgetPointerToID[className].size();
            }
            id = this->widgetPointerToID[className][obj];
            targetWidget = className + " " + QString::number(id);
            this->appendToLog(inputTypeAsString, eventType, targetWidget, details);
        }
    
        // Always propagate the event further.
        return false;
    }
    
    void QEventLogger::appendToLog(const QString & inputType, const QString & eventType, const QString & targetWidget, const QString & details) {
        static int elapsedTime;
    
        // Store the amount of time that has elapsed, so there are no inconsistencies between further usages.
        elapsedTime = this->time->elapsed();   **No Member named elapsed in Qtime**
    
        if (this->screenshotsEnabled && eventType.compare("MouseMove") != 0)
            (QPixmap::grabWidget(mainWidget).toImage()).save(screenshotDirName + "/" + QString::number(elapsedTime) + ".png", "PNG");    **No member named grabWidget in Pixmap**
    
        *(this->log) << elapsedTime << ',' << inputType<< ',' << eventType << ',' << targetWidget << ',' << details << '\n';
        //qDebug() << elapsedTime << inputType << eventType << targetWidget << details;
        this->log->flush();
    }
    

    I have highlighted errors in Bold Fonts. Also attaching Images.
    Screenshot 2023-02-01 184222.png

    1 Reply Last reply
    0
    • A Aviral 0
      1 Feb 2023, 18:38

      @jsulm I have done this, please suggest where I am wrong:

       if (this->screenshotsEnabled && eventType.compare("MouseMove") != 0)
        {
          QPixmap *gb;
          gb mainWidget->grab().toImage().save(screenshotDirName + "/" + QString::number(elapsedTime) + ".png", "PNG");
      }
      

      Its showing error, Please Help!

      C Offline
      C Offline
      ChrisW67
      wrote on 1 Feb 2023, 23:10 last edited by
      #12

      @Aviral-0 said in Errors in EventLogger. This eventlogger is designed on Qt5 but having these errors in QT 6.2:

      if (this->screenshotsEnabled && eventType.compare("MouseMove") != 0)
      {
      QPixmap *gb;
      gb mainWidget->grab().toImage().save(screenshotDirName + "/" + QString::number(elapsedTime) + ".png", "PNG");
      }

      Its showing error, Please Help!
      

      As @SGaist points out, you are missing a "=".

      You are also not initialising your pointer (a C++ cardinal sin) but ultimately that's a moot point.
      QWidget::grab() returns an actual QPixmap, not a pointer to one.
      There is also no need to convert the QPixmap to a QImage in order to save it: QPixmap::save().

       if (this->screenshotsEnabled && eventType.compare("MouseMove") != 0)
       {
          QPixmap gb = mainWidget->grab();
          gb.save(screenshotDirName + "/" + QString::number(elapsedTime) + ".png", "PNG");\
          // Consider whether you need to check that the save was successful
      }
      
      1 Reply Last reply
      2
      • C Offline
        C Offline
        Christian Ehrlicher
        Lifetime Qt Champion
        wrote on 1 Feb 2023, 13:18 last edited by
        #2

        See the deprecation information about those functions in Qt5, e.g. https://doc.qt.io/qt-5/qtime-obsolete.html and https://doc.qt.io/qt-5/qpixmap-obsolete.html

        To measure a timespan, use QElapsedTimer, for QPixmap see the deprecated function page.

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

        A 2 Replies Last reply 1 Feb 2023, 13:23
        2
        • C Christian Ehrlicher
          1 Feb 2023, 13:18

          See the deprecation information about those functions in Qt5, e.g. https://doc.qt.io/qt-5/qtime-obsolete.html and https://doc.qt.io/qt-5/qpixmap-obsolete.html

          To measure a timespan, use QElapsedTimer, for QPixmap see the deprecated function page.

          A Offline
          A Offline
          Aviral 0
          wrote on 1 Feb 2023, 13:23 last edited by
          #3

          @Christian-Ehrlicher Hi Thankyou for solution. I am new to QT, I have very little idea of how to do it. I would really appreciate if you help me with that piece of code! Thankyou and congrats for life time QT champion.

          1 Reply Last reply
          0
          • C Christian Ehrlicher
            1 Feb 2023, 13:18

            See the deprecation information about those functions in Qt5, e.g. https://doc.qt.io/qt-5/qtime-obsolete.html and https://doc.qt.io/qt-5/qpixmap-obsolete.html

            To measure a timespan, use QElapsedTimer, for QPixmap see the deprecated function page.

            A Offline
            A Offline
            Aviral 0
            wrote on 1 Feb 2023, 13:44 last edited by
            #4

            @Christian-Ehrlicher I have solved the problem of QTime with QElapsedTimer
            But I can't find replacement of QPixmap. Please if you can find share.

            J 1 Reply Last reply 1 Feb 2023, 13:45
            0
            • A Aviral 0
              1 Feb 2023, 13:44

              @Christian-Ehrlicher I have solved the problem of QTime with QElapsedTimer
              But I can't find replacement of QPixmap. Please if you can find share.

              J Offline
              J Offline
              jsulm
              Lifetime Qt Champion
              wrote on 1 Feb 2023, 13:45 last edited by
              #5

              @Aviral-0 From the link @Christian-Ehrlicher gave you:

              QPixmap QPixmap::grabWidget(QObject *widget, const QRect &rectangle)
              
              This function is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.
              
              Use QWidget::grab() instead.
              

              So, what about using grab() instead of grabWidget()?

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

              A 2 Replies Last reply 1 Feb 2023, 13:57
              1
              • J jsulm
                1 Feb 2023, 13:45

                @Aviral-0 From the link @Christian-Ehrlicher gave you:

                QPixmap QPixmap::grabWidget(QObject *widget, const QRect &rectangle)
                
                This function is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.
                
                Use QWidget::grab() instead.
                

                So, what about using grab() instead of grabWidget()?

                A Offline
                A Offline
                Aviral 0
                wrote on 1 Feb 2023, 13:57 last edited by
                #6

                @jsulm Yeah I am trying it, and its throwing error saying
                call to non static member function without an object argument
                If you know what change its aking?

                C 1 Reply Last reply 1 Feb 2023, 14:00
                0
                • A Aviral 0
                  1 Feb 2023, 13:57

                  @jsulm Yeah I am trying it, and its throwing error saying
                  call to non static member function without an object argument
                  If you know what change its aking?

                  C Offline
                  C Offline
                  Christian Ehrlicher
                  Lifetime Qt Champion
                  wrote on 1 Feb 2023, 14:00 last edited by
                  #7

                  @Aviral-0 said in Errors in EventLogger. This eventlogger is designed on Qt5 but having these errors in QT 6.2:

                  all to non static member function without an object argument

                  Because QWidget::grab() is not a static function. You have to call it on an object (mainWidget I would guess) - plain c++ stuff.

                  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
                  1
                  • J jsulm
                    1 Feb 2023, 13:45

                    @Aviral-0 From the link @Christian-Ehrlicher gave you:

                    QPixmap QPixmap::grabWidget(QObject *widget, const QRect &rectangle)
                    
                    This function is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.
                    
                    Use QWidget::grab() instead.
                    

                    So, what about using grab() instead of grabWidget()?

                    A Offline
                    A Offline
                    Aviral 0
                    wrote on 1 Feb 2023, 18:38 last edited by Aviral 0 2 Jan 2023, 18:41
                    #8

                    @jsulm I have done this, please suggest where I am wrong:

                     if (this->screenshotsEnabled && eventType.compare("MouseMove") != 0)
                      {
                        QPixmap *gb;
                        gb mainWidget->grab().toImage().save(screenshotDirName + "/" + QString::number(elapsedTime) + ".png", "PNG");
                    }
                    

                    Its showing error, Please Help!

                    C 1 Reply Last reply 1 Feb 2023, 23:10
                    0
                    • S Offline
                      S Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on 1 Feb 2023, 18:48 last edited by
                      #9

                      Hi,

                      You are missing an = sign.

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      A 1 Reply Last reply 1 Feb 2023, 19:38
                      0
                      • S SGaist
                        1 Feb 2023, 18:48

                        Hi,

                        You are missing an = sign.

                        A Offline
                        A Offline
                        Aviral 0
                        wrote on 1 Feb 2023, 19:38 last edited by
                        #10

                        @SGaist with = also its showing error

                        S 1 Reply Last reply 1 Feb 2023, 19:45
                        0
                        • A Aviral 0
                          1 Feb 2023, 19:38

                          @SGaist with = also its showing error

                          S Offline
                          S Offline
                          SGaist
                          Lifetime Qt Champion
                          wrote on 1 Feb 2023, 19:45 last edited by
                          #11

                          @Aviral-0 said in Errors in EventLogger. This eventlogger is designed on Qt5 but having these errors in QT 6.2:

                          @SGaist with = also its showing error

                          You do realise that "showing error" gives no information to help you with ?

                          Interested in AI ? www.idiap.ch
                          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                          1 Reply Last reply
                          1
                          • A Aviral 0
                            1 Feb 2023, 18:38

                            @jsulm I have done this, please suggest where I am wrong:

                             if (this->screenshotsEnabled && eventType.compare("MouseMove") != 0)
                              {
                                QPixmap *gb;
                                gb mainWidget->grab().toImage().save(screenshotDirName + "/" + QString::number(elapsedTime) + ".png", "PNG");
                            }
                            

                            Its showing error, Please Help!

                            C Offline
                            C Offline
                            ChrisW67
                            wrote on 1 Feb 2023, 23:10 last edited by
                            #12

                            @Aviral-0 said in Errors in EventLogger. This eventlogger is designed on Qt5 but having these errors in QT 6.2:

                            if (this->screenshotsEnabled && eventType.compare("MouseMove") != 0)
                            {
                            QPixmap *gb;
                            gb mainWidget->grab().toImage().save(screenshotDirName + "/" + QString::number(elapsedTime) + ".png", "PNG");
                            }

                            Its showing error, Please Help!
                            

                            As @SGaist points out, you are missing a "=".

                            You are also not initialising your pointer (a C++ cardinal sin) but ultimately that's a moot point.
                            QWidget::grab() returns an actual QPixmap, not a pointer to one.
                            There is also no need to convert the QPixmap to a QImage in order to save it: QPixmap::save().

                             if (this->screenshotsEnabled && eventType.compare("MouseMove") != 0)
                             {
                                QPixmap gb = mainWidget->grab();
                                gb.save(screenshotDirName + "/" + QString::number(elapsedTime) + ".png", "PNG");\
                                // Consider whether you need to check that the save was successful
                            }
                            
                            1 Reply Last reply
                            2
                            • A Offline
                              A Offline
                              AlmaCarreon
                              Banned
                              wrote on 2 Feb 2023, 06:02 last edited by AlmaCarreon 2 Feb 2023, 06:03
                              #13
                              This post is deleted!
                              1 Reply Last reply
                              0

                              8/13

                              1 Feb 2023, 18:38

                              • Login

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