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. Simulate left mouse button unclick (release button)
Forum Updated to NodeBB v4.3 + New Features

Simulate left mouse button unclick (release button)

Scheduled Pinned Locked Moved Solved General and Desktop
31 Posts 3 Posters 14.9k 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.
  • mrjjM mrjj

    well
    the drop down part of a combo box is using an event filter. I think its related to this but
    not sure. If it works with a real mouse, why not with touch ?

    Do you use real touch events or did you tell it to act like a mouse? ( the touch controller)

    Well, no harm in trying but I guess it will just be eaten too
    QMouseEvent *mEvnRelease = new QMouseEvent(QEvent::MouseButtonRelease, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
    QCoreApplication::sendEvent(QWidget::focusWidget(),mEvnRelease);

    Did you try with other applications?
    Anything with a combobox should do the same. :)

    A Offline
    A Offline
    Andrey Shmelew
    wrote on last edited by Andrey Shmelew
    #7

    @mrjj
    hmmm...

    i use yours code:

    void MainWindow::mousePressEvent(QMouseEvent* event)
    {
        if(event->buttons() == Qt::RightButton)
            ui->label_7->setText("Only right button");
        if(event->buttons() == Qt::LeftButton)
            ui->label_7->setText("Only left button");
        QMouseEvent *mEvnRelease = new QMouseEvent(QEvent::MouseButtonRelease, QCursor::pos(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
        QCoreApplication::sendEvent(QWidget::focusWidget(),mEvnRelease);
    }
    

    , it works now better, but even if MouseButtonRelease event exsists, buttons somehow becomes untouchable.

    "Do you use real touch events or did you tell it to act like a mouse? ( the touch controller)"

    it acts like a mouse (touch controller presents)!

    I have uploaded example project with combobox to the device, and there is exactly the same problem.

    mrjjM 1 Reply Last reply
    0
    • A Andrey Shmelew

      @mrjj
      hmmm...

      i use yours code:

      void MainWindow::mousePressEvent(QMouseEvent* event)
      {
          if(event->buttons() == Qt::RightButton)
              ui->label_7->setText("Only right button");
          if(event->buttons() == Qt::LeftButton)
              ui->label_7->setText("Only left button");
          QMouseEvent *mEvnRelease = new QMouseEvent(QEvent::MouseButtonRelease, QCursor::pos(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
          QCoreApplication::sendEvent(QWidget::focusWidget(),mEvnRelease);
      }
      

      , it works now better, but even if MouseButtonRelease event exsists, buttons somehow becomes untouchable.

      "Do you use real touch events or did you tell it to act like a mouse? ( the touch controller)"

      it acts like a mouse (touch controller presents)!

      I have uploaded example project with combobox to the device, and there is exactly the same problem.

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

      @Andrey-Shmelew
      Hmm really sounds like the touch controller is not acting as a mouse and only
      sends touch events.

      You could set a event filter and watch what events you get.
      http://www.informit.com/articles/article.aspx?p=1405544&seqNum=2

      also note with the code its sends m up to the focused control so if it was not the
      same control that got Mouse Press, it will not work.

      Ps. to get names and not ints for the events, you can use
      https://www.dropbox.com/s/rujoldiax0cql3z/names.txt?dl=0

      A 1 Reply Last reply
      1
      • mrjjM mrjj

        @Andrey-Shmelew
        Hmm really sounds like the touch controller is not acting as a mouse and only
        sends touch events.

        You could set a event filter and watch what events you get.
        http://www.informit.com/articles/article.aspx?p=1405544&seqNum=2

        also note with the code its sends m up to the focused control so if it was not the
        same control that got Mouse Press, it will not work.

        Ps. to get names and not ints for the events, you can use
        https://www.dropbox.com/s/rujoldiax0cql3z/names.txt?dl=0

        A Offline
        A Offline
        Andrey Shmelew
        wrote on last edited by
        #9

        @mrjj

        thank you for the link, sir!

        i have event handler:

        void MainWindow::mouseReleaseEvent(QMouseEvent* event)
        {
            ui->label_7->setText("button Released");
        }
        

        and touch controller sends this event.

        maybe, it sends mouseReleaseEvent properly not every time i when i touch

        A mrjjM 2 Replies Last reply
        0
        • A Andrey Shmelew

          @mrjj

          thank you for the link, sir!

          i have event handler:

          void MainWindow::mouseReleaseEvent(QMouseEvent* event)
          {
              ui->label_7->setText("button Released");
          }
          

          and touch controller sends this event.

          maybe, it sends mouseReleaseEvent properly not every time i when i touch

          A Offline
          A Offline
          Andrey Shmelew
          wrote on last edited by
          #10

          i found a bug,
          in my project i have a dial control...
          firstly i touched to control and manipulated a litlle bit,
          then i touched free area (without any controls or widgets) and noticed than dial reacts on my touching and rotates in direct of my touch spot (i did not touch dial but it turned).

          1 Reply Last reply
          0
          • A Andrey Shmelew

            @mrjj

            thank you for the link, sir!

            i have event handler:

            void MainWindow::mouseReleaseEvent(QMouseEvent* event)
            {
                ui->label_7->setText("button Released");
            }
            

            and touch controller sends this event.

            maybe, it sends mouseReleaseEvent properly not every time i when i touch

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

            @Andrey-Shmelew
            Well you can check with mouseReleaseEvent if it fires every time.
            If yes, then something else is still not 100% like a mouse.

            I had some issues with some widgets that look for mouse move and mouse leave events ( focusin/out)
            which is not (always) send with a touch. But I dont remember a plain combobox being an issue.

            Have you tested with some non Qt app ?
            Does it accept the touch fully as a mouse?

            A 2 Replies Last reply
            1
            • mrjjM mrjj

              @Andrey-Shmelew
              Well you can check with mouseReleaseEvent if it fires every time.
              If yes, then something else is still not 100% like a mouse.

              I had some issues with some widgets that look for mouse move and mouse leave events ( focusin/out)
              which is not (always) send with a touch. But I dont remember a plain combobox being an issue.

              Have you tested with some non Qt app ?
              Does it accept the touch fully as a mouse?

              A Offline
              A Offline
              Andrey Shmelew
              wrote on last edited by
              #12

              @mrjj
              i will answer tomorrow! need to go :(
              Thank you!

              1 Reply Last reply
              1
              • mrjjM mrjj

                @Andrey-Shmelew
                Well you can check with mouseReleaseEvent if it fires every time.
                If yes, then something else is still not 100% like a mouse.

                I had some issues with some widgets that look for mouse move and mouse leave events ( focusin/out)
                which is not (always) send with a touch. But I dont remember a plain combobox being an issue.

                Have you tested with some non Qt app ?
                Does it accept the touch fully as a mouse?

                A Offline
                A Offline
                Andrey Shmelew
                wrote on last edited by Andrey Shmelew
                #13

                @mrjj
                Hello and Happy New Year!

                I installed VLC media player on my beaglebone, and have been playing with controls (combobox, scrollbars etc...), and all was going well, no bugs with comboboxes, touch screen clicks and releases fine.
                I noticed that combobox in VLC player and combobox in QT are differented of each other.

                VLC acceps the touch fully as a mouse, i suppose.

                mrjjM 1 Reply Last reply
                0
                • A Andrey Shmelew

                  @mrjj
                  Hello and Happy New Year!

                  I installed VLC media player on my beaglebone, and have been playing with controls (combobox, scrollbars etc...), and all was going well, no bugs with comboboxes, touch screen clicks and releases fine.
                  I noticed that combobox in VLC player and combobox in QT are differented of each other.

                  VLC acceps the touch fully as a mouse, i suppose.

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

                  @Andrey-Shmelew
                  Hi
                  Happy new year to you too

                  Ok it does sound like it is working as it should. Maybe VLC is very touch friendly.

                  Can we test with one app ( nothing as well used with touch as VLC ) to test ?

                  Still think its just controller that slips a mouse up sometimes but not sure yet.

                  A 1 Reply Last reply
                  0
                  • mrjjM mrjj

                    @Andrey-Shmelew
                    Hi
                    Happy new year to you too

                    Ok it does sound like it is working as it should. Maybe VLC is very touch friendly.

                    Can we test with one app ( nothing as well used with touch as VLC ) to test ?

                    Still think its just controller that slips a mouse up sometimes but not sure yet.

                    A Offline
                    A Offline
                    Andrey Shmelew
                    wrote on last edited by
                    #15

                    @mrjj said in Simulate left mouse button unclick (release button):

                    Can we test with one app ( nothing as well used with touch as VLC ) to test ?

                    yes, sure, i will try evrethyng i can

                    mrjjM 1 Reply Last reply
                    0
                    • A Andrey Shmelew

                      @mrjj said in Simulate left mouse button unclick (release button):

                      Can we test with one app ( nothing as well used with touch as VLC ) to test ?

                      yes, sure, i will try evrethyng i can

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

                      @Andrey-Shmelew
                      Super
                      Did you also check with main window that
                      void MainWindow::mouseReleaseEvent(QMouseEvent* event)
                      {
                      qDebug() << ("button Released");
                      }

                      is always called?
                      Make sure only to click on the mainwindow.

                      A 1 Reply Last reply
                      0
                      • mrjjM mrjj

                        @Andrey-Shmelew
                        Super
                        Did you also check with main window that
                        void MainWindow::mouseReleaseEvent(QMouseEvent* event)
                        {
                        qDebug() << ("button Released");
                        }

                        is always called?
                        Make sure only to click on the mainwindow.

                        A Offline
                        A Offline
                        Andrey Shmelew
                        wrote on last edited by Andrey Shmelew
                        #17

                        @mrjj said in Simulate left mouse button unclick (release button):

                        is always called

                        if only i did not press combobox...

                        As soon as I clicked combobox, no matter how many times I clicked on the mainwindow, label_7 is always "Only left button"

                        qDebug() << ("button Released"); is not working in linux app, so i use label_7 as debug out

                        mrjjM 1 Reply Last reply
                        0
                        • A Andrey Shmelew

                          @mrjj said in Simulate left mouse button unclick (release button):

                          is always called

                          if only i did not press combobox...

                          As soon as I clicked combobox, no matter how many times I clicked on the mainwindow, label_7 is always "Only left button"

                          qDebug() << ("button Released"); is not working in linux app, so i use label_7 as debug out

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

                          @Andrey-Shmelew
                          Yes combo is special as it drop down a floating window and use event filer for selection so
                          it is not canceled correctly, it will then eat all events and nothing else can be clicked.

                          ehh qDebug() not working in linux ? you mean outside Creator or ?
                          Dont matter. Label is fine :)

                          A 1 Reply Last reply
                          1
                          • mrjjM mrjj

                            @Andrey-Shmelew
                            Yes combo is special as it drop down a floating window and use event filer for selection so
                            it is not canceled correctly, it will then eat all events and nothing else can be clicked.

                            ehh qDebug() not working in linux ? you mean outside Creator or ?
                            Dont matter. Label is fine :)

                            A Offline
                            A Offline
                            Andrey Shmelew
                            wrote on last edited by
                            #19

                            @mrjj
                            Hello!

                            So, the problem is not solved,
                            should i use events filter?

                            thanks!

                            mrjjM 1 Reply Last reply
                            0
                            • A Andrey Shmelew

                              @mrjj
                              Hello!

                              So, the problem is not solved,
                              should i use events filter?

                              thanks!

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

                              @Andrey-Shmelew
                              well, i would dig a bit deeper into what is going on.
                              I never seen combo not work like that.
                              Seems something else than missing events.

                              But yes, you can most likely work around using event filters but there might surface other stuff
                              like broken drag and drop or something as its not a bug in combobox ( no other reports) as such so
                              something else is not as expected with the touch.

                              I tried at work with touch screen and could not reproduce it so Im a bit lost why
                              its not just closing its dropdown.

                              I think it will/might be a mess with eventfilter
                              but if you only have one combobox you
                              need to fix it should be ok
                              but if you use combos all over program i would
                              go for better solution.

                              A 1 Reply Last reply
                              1
                              • mrjjM mrjj

                                @Andrey-Shmelew
                                well, i would dig a bit deeper into what is going on.
                                I never seen combo not work like that.
                                Seems something else than missing events.

                                But yes, you can most likely work around using event filters but there might surface other stuff
                                like broken drag and drop or something as its not a bug in combobox ( no other reports) as such so
                                something else is not as expected with the touch.

                                I tried at work with touch screen and could not reproduce it so Im a bit lost why
                                its not just closing its dropdown.

                                I think it will/might be a mess with eventfilter
                                but if you only have one combobox you
                                need to fix it should be ok
                                but if you use combos all over program i would
                                go for better solution.

                                A Offline
                                A Offline
                                Andrey Shmelew
                                wrote on last edited by
                                #21

                                @mrjj
                                Unfortunately, i use combos all over program. I want to use comboboxes for configure my device. if you could not reproduce it, maybe it happens because of my touch's non-correct work. If i could make any help for you for help me ...

                                mrjjM raven-worxR 2 Replies Last reply
                                0
                                • A Andrey Shmelew

                                  @mrjj
                                  Unfortunately, i use combos all over program. I want to use comboboxes for configure my device. if you could not reproduce it, maybe it happens because of my touch's non-correct work. If i could make any help for you for help me ...

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

                                  @Andrey-Shmelew

                                  Hmm, I asked another mod here for some input (later) as there is something
                                  funky here. Maybe im overlooking something.
                                  If your touch acts as pure touch or is faulty then other controls should also have issues.

                                  But since we do not have any event trace is very unclear what is happening.
                                  Also as far as I know, the drop down part of the combobox is already using event filter.
                                  So its not sure event filters are a good/easy fix.

                                  I think i would still dig deeper to find real reason. ( look in Qt source)

                                  Alternatively, make my own combo box and control the dropdown with lost focus if possible.
                                  Didnt check the code so not sure how it handles the dropdown.

                                  1 Reply Last reply
                                  1
                                  • A Andrey Shmelew

                                    @mrjj
                                    Unfortunately, i use combos all over program. I want to use comboboxes for configure my device. if you could not reproduce it, maybe it happens because of my touch's non-correct work. If i could make any help for you for help me ...

                                    raven-worxR Offline
                                    raven-worxR Offline
                                    raven-worx
                                    Moderators
                                    wrote on last edited by raven-worx
                                    #23

                                    @Andrey-Shmelew
                                    whats your touch screen model?
                                    Whats your input mode (evdev, tslib, libinput) used?
                                    What is your used Qt platform (X, LinuxFB, EGLFS)?

                                    Just to make sure: you are using QtWidgets right, not QML?

                                    btw. VLC also uses Qt for it's GUI. But i currently don't know which version.
                                    Can you also try to use Qt 5.8 RC if you encounter the same issues?

                                    Also you could log all events like the following. Start the application from the console and you should see the output in stdout.

                                    qApp->installEventFilter( this );
                                    ...
                                    bool eventFilter( QObject* watched, QEvent* event )
                                    {
                                         switch( event->type() )
                                         {
                                                   case QEvent::MousePressEvent:
                                                   case QEvent::MouseReleaseEvent:
                                                   case QEvent::TouchBegin:
                                                   case QEvent::TouchCancel:
                                                   case QEvent::TouchEnd:
                                                            qDebug() << int(event->type()) << watched;
                                                  break;
                                         }
                                    
                                         return BaseClass::eventFilter(watched,event);
                                    }
                                    

                                    --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
                                    If you have a question please use the forum so others can benefit from the solution in the future

                                    A 2 Replies Last reply
                                    3
                                    • raven-worxR raven-worx

                                      @Andrey-Shmelew
                                      whats your touch screen model?
                                      Whats your input mode (evdev, tslib, libinput) used?
                                      What is your used Qt platform (X, LinuxFB, EGLFS)?

                                      Just to make sure: you are using QtWidgets right, not QML?

                                      btw. VLC also uses Qt for it's GUI. But i currently don't know which version.
                                      Can you also try to use Qt 5.8 RC if you encounter the same issues?

                                      Also you could log all events like the following. Start the application from the console and you should see the output in stdout.

                                      qApp->installEventFilter( this );
                                      ...
                                      bool eventFilter( QObject* watched, QEvent* event )
                                      {
                                           switch( event->type() )
                                           {
                                                     case QEvent::MousePressEvent:
                                                     case QEvent::MouseReleaseEvent:
                                                     case QEvent::TouchBegin:
                                                     case QEvent::TouchCancel:
                                                     case QEvent::TouchEnd:
                                                              qDebug() << int(event->type()) << watched;
                                                    break;
                                           }
                                      
                                           return BaseClass::eventFilter(watched,event);
                                      }
                                      
                                      A Offline
                                      A Offline
                                      Andrey Shmelew
                                      wrote on last edited by Andrey Shmelew
                                      #24

                                      @raven-worx
                                      This is my display : http://www.waveshare.com/10.1inch-hdmi-lcd-b-with-case.htm
                                      i dont know inpute mode (maybe this is a reason of a bug)
                                      i also dont know qt platform (maybe Qt Creator 4.1.0
                                      Основан на Qt 5.7.0 (MSVC 2013, 32 бита) is answer), and i built qt everywere with gcc arm none eabi compiler.
                                      I use QtWidgets, not QML, i am sure.
                                      OK I think i can try QT 5.8 RC
                                      Ok i will log all events following your code

                                      here is video demonstrates how combo works https://drive.google.com/file/d/0ByPoVqOCWO2IVERuMkMzTmZsMjA/view

                                      raven-worxR 1 Reply Last reply
                                      0
                                      • A Andrey Shmelew

                                        @raven-worx
                                        This is my display : http://www.waveshare.com/10.1inch-hdmi-lcd-b-with-case.htm
                                        i dont know inpute mode (maybe this is a reason of a bug)
                                        i also dont know qt platform (maybe Qt Creator 4.1.0
                                        Основан на Qt 5.7.0 (MSVC 2013, 32 бита) is answer), and i built qt everywere with gcc arm none eabi compiler.
                                        I use QtWidgets, not QML, i am sure.
                                        OK I think i can try QT 5.8 RC
                                        Ok i will log all events following your code

                                        here is video demonstrates how combo works https://drive.google.com/file/d/0ByPoVqOCWO2IVERuMkMzTmZsMjA/view

                                        raven-worxR Offline
                                        raven-worxR Offline
                                        raven-worx
                                        Moderators
                                        wrote on last edited by raven-worx
                                        #25

                                        @Andrey-Shmelew
                                        in the video the mouse cursor changes it's shape (to Qt::IBeamCursor), from then on your widgets do not react anymore.
                                        You can also log the focus changes by connecting to QApplication::focusChanged() signal. It would be interesting what's the focus widget is in that case.

                                        Maybe you use QWidget::grabMouse() in this widget?

                                        Can you also please set QT_DEBUG_PLUGINS=1 environment variable and post the output from the console. Maybe before/after you try the other debug output.
                                        This shows what plugins are being loaded.

                                        --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
                                        If you have a question please use the forum so others can benefit from the solution in the future

                                        A 1 Reply Last reply
                                        1
                                        • raven-worxR raven-worx

                                          @Andrey-Shmelew
                                          in the video the mouse cursor changes it's shape (to Qt::IBeamCursor), from then on your widgets do not react anymore.
                                          You can also log the focus changes by connecting to QApplication::focusChanged() signal. It would be interesting what's the focus widget is in that case.

                                          Maybe you use QWidget::grabMouse() in this widget?

                                          Can you also please set QT_DEBUG_PLUGINS=1 environment variable and post the output from the console. Maybe before/after you try the other debug output.
                                          This shows what plugins are being loaded.

                                          A Offline
                                          A Offline
                                          Andrey Shmelew
                                          wrote on last edited by Andrey Shmelew
                                          #26

                                          @raven-worx
                                          i added QApplication::focusChanged() signal:

                                          int main(int argc, char *argv[])
                                          {
                                              QApplication a(argc, argv);
                                              MainWindow w;
                                              QObject::connect(&a, SIGNAL(focusChanged(QWidget*,QWidget*)), &w, SLOT(textupdate()));
                                              w.show();
                                              return a.exec();
                                          }
                                          

                                          then added a slot:

                                          void MainWindow::textupdate()
                                          {
                                          QWidget * fw = qApp->focusWidget();
                                          ui->textEdit_3->setText(ui->textEdit_3->toPlainText() + " | " + fw->objectName());
                                          }
                                          

                                          accordingly, i can see focused widget name, right?
                                          After it, i noticed strange behaviour:
                                          after some clicks on comboboxes, it becomes impossible to control all of widgets besides textEdit widgets (and sometimes... dial). Thats all. All other widgets (sliders, combos) are dead. And strange that when i click on textEdit, mouse cursor is always at the begin.

                                          And the following video : https://drive.google.com/open?id=0ByPoVqOCWO2IMmdlMk8xTEVoa0U

                                          PS, sometimes when bug happens, i can select text in textEdit by my finger (as if I hold down the left mouse button), so i made a conclusion that "touch mouse button" didnt released properly. And the video:
                                          https://drive.google.com/open?id=0ByPoVqOCWO2IS2lIQUpBSlNPWDA

                                          trying QT 5.8 RC did not bring good results

                                          case QEvent::MousePressEvent:
                                          case QEvent::MouseReleaseEvent:

                                          MousePressEvent and MouseReleaseEvent are not exsist

                                          PPS: After i connect regular mouse and click left button, all becomes normal.

                                          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