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. Custom QWidget Keyboard first time click issue.

Custom QWidget Keyboard first time click issue.

Scheduled Pinned Locked Moved Unsolved General and Desktop
27 Posts 5 Posters 6.1k Views 2 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.
  • D deleted372

    I would call lineEditkeyboard->setLineEdit(line) only when the lineEdit gets the focus.
    In addition, in the setLineEdit(), I would call this->setFocusProxy(line). In order to avoid your keyboard to steal the focus from your linedit.

    A Offline
    A Offline
    Arvind K
    wrote on last edited by
    #16

    @JoZCaVaLLo
    @mrjj
    @J-Hilk
    @dheerendra
    one more thing to share when I called keyboard widget with a show() like
    lineEditkeyboard->setLineEdit(line);
    lineEditkeyboard->show();

    the keyboard works properly but when I called Keyboard like

    lineEditkeyboard->setLineEdit(line);
    lineEditkeyboard->setWindowModality(Qt::ApplicationModal);
    lineEditkeyboard->show();

    then I face the same issue of the first click.

    mrjjM 1 Reply Last reply
    0
    • A Arvind K

      @JoZCaVaLLo
      @mrjj
      @J-Hilk
      @dheerendra
      one more thing to share when I called keyboard widget with a show() like
      lineEditkeyboard->setLineEdit(line);
      lineEditkeyboard->show();

      the keyboard works properly but when I called Keyboard like

      lineEditkeyboard->setLineEdit(line);
      lineEditkeyboard->setWindowModality(Qt::ApplicationModal);
      lineEditkeyboard->show();

      then I face the same issue of the first click.

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

      @Arvind-K
      hi, we need to find out what is happening.
      please do
      qDebug() << "focus widget " << qApp->focusObject();
      which tells us when you open the keyboard, who has focus.
      Meaning who will get the keys if u type.
      I think you have something that steals keyboard focus when u open the
      lineEditkeyboard

      A 1 Reply Last reply
      0
      • mrjjM mrjj

        @Arvind-K
        hi, we need to find out what is happening.
        please do
        qDebug() << "focus widget " << qApp->focusObject();
        which tells us when you open the keyboard, who has focus.
        Meaning who will get the keys if u type.
        I think you have something that steals keyboard focus when u open the
        lineEditkeyboard

        A Offline
        A Offline
        Arvind K
        wrote on last edited by
        #18

        @mrjj

        as you said I have done same when keyboard widget is shown.
        output is

        DBG default: focus widget QLineEdit(0x227ca90, name = "lineEdit")

        lineEdit is Nothing but the QLineEdit on Keyboard widget.

        mrjjM 1 Reply Last reply
        0
        • A Arvind K

          @mrjj

          as you said I have done same when keyboard widget is shown.
          output is

          DBG default: focus widget QLineEdit(0x227ca90, name = "lineEdit")

          lineEdit is Nothing but the QLineEdit on Keyboard widget.

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

          @Arvind-K
          Ok so it does have the focus when first click is not registered?

          A 1 Reply Last reply
          0
          • mrjjM mrjj

            @Arvind-K
            Ok so it does have the focus when first click is not registered?

            A Offline
            A Offline
            Arvind K
            wrote on last edited by
            #20

            @mrjj

            Yes.
            after that when I click on Anywhere on Widget Nothing happen or no Any event gets called.

            mrjjM 1 Reply Last reply
            0
            • A Arvind K

              @mrjj

              Yes.
              after that when I click on Anywhere on Widget Nothing happen or no Any event gets called.

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

              @Arvind-K
              so the widget appear frozen for a moment ?
              Do you have any kind of loops in constructor or anything like that ?

              A 1 Reply Last reply
              0
              • mrjjM mrjj

                @Arvind-K
                so the widget appear frozen for a moment ?
                Do you have any kind of loops in constructor or anything like that ?

                A Offline
                A Offline
                Arvind K
                wrote on last edited by
                #22

                @mrjj

                No, there is no Loop in the constructor or No Any other code only I have connected signal to Slot.

                Keyboard::Keyboard(QWidget *parent) :
                QWidget(parent),
                ui(new Ui::Keyboard)
                {
                ui->setupUi(this);

                this->setWindowFlags(Qt::WindowStaysOnTopHint);
                connect ( ui->Buttonq, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttonw, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttone, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttonr, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttont, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttony, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttonu, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttoni, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttono, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttonp, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                
                connect ( ui->Buttona, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttons, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttond, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttonf, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttong, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttonh, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttonj, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttonk, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttonl, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttonz, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttonx, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttonc, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttonv, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttonb, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttonn, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Buttonm, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Button0, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Button1, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Button2, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Button3, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Button4, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Button5, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Button6, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Button7, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Button8, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->Button9, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                connect ( ui->space, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                
                outputText = "";
                shift = false;
                

                }

                mrjjM 1 Reply Last reply
                0
                • A Arvind K

                  @mrjj

                  No, there is no Loop in the constructor or No Any other code only I have connected signal to Slot.

                  Keyboard::Keyboard(QWidget *parent) :
                  QWidget(parent),
                  ui(new Ui::Keyboard)
                  {
                  ui->setupUi(this);

                  this->setWindowFlags(Qt::WindowStaysOnTopHint);
                  connect ( ui->Buttonq, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttonw, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttone, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttonr, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttont, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttony, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttonu, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttoni, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttono, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttonp, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  
                  connect ( ui->Buttona, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttons, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttond, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttonf, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttong, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttonh, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttonj, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttonk, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttonl, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttonz, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttonx, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttonc, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttonv, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttonb, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttonn, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Buttonm, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Button0, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Button1, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Button2, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Button3, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Button4, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Button5, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Button6, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Button7, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Button8, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->Button9, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  connect ( ui->space, SIGNAL( clicked() ), this, SLOT( keyboardHandler() ) );
                  
                  outputText = "";
                  shift = false;
                  

                  }

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

                  @Arvind-K
                  ok. when this situation is happening.
                  Does the buttons show activated effect ?
                  I mean can u see u pres them or anything ?

                  A 1 Reply Last reply
                  0
                  • A Offline
                    A Offline
                    Arvind K
                    wrote on last edited by
                    #24

                    @mrjj

                    As I mentioned Previously when I set WindowModality of Keyboard widget to QApplicationModal I face this First Click issue otherwise it works fine. but if I didn't set windowModality then Keyboard goes back to the parent widget.

                    **lineEditkeyboard->setWindowModality(Qt::ApplicationModal); **

                    mrjjM 1 Reply Last reply
                    0
                    • A Arvind K

                      @mrjj

                      As I mentioned Previously when I set WindowModality of Keyboard widget to QApplicationModal I face this First Click issue otherwise it works fine. but if I didn't set windowModality then Keyboard goes back to the parent widget.

                      **lineEditkeyboard->setWindowModality(Qt::ApplicationModal); **

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

                      Hmm.
                      The code looks ok fine and i cant see any reason for
                      QApplicationModal to cause this effect but
                      it could be a bug in Qt.

                      1 Reply Last reply
                      0
                      • mrjjM mrjj

                        @Arvind-K
                        ok. when this situation is happening.
                        Does the buttons show activated effect ?
                        I mean can u see u pres them or anything ?

                        A Offline
                        A Offline
                        Arvind K
                        wrote on last edited by
                        #26

                        @mrjj

                        I can't see press button effect for the first time.

                        mrjjM 1 Reply Last reply
                        0
                        • A Arvind K

                          @mrjj

                          I can't see press button effect for the first time.

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

                          @Arvind-K
                          Ok, then it seems its stuck for a moment in the event loop.
                          Im not sure what to do about that.
                          setWindowModality(Qt::ApplicationModal) must use a local even loop to make
                          it modal so might be a but with this or something i dont see in the code.

                          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