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. How to set the widget has the default focus properties

How to set the widget has the default focus properties

Scheduled Pinned Locked Moved Solved General and Desktop
14 Posts 5 Posters 11.5k Views
  • 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.
  • Qt_crazyerQ Offline
    Qt_crazyerQ Offline
    Qt_crazyer
    wrote on last edited by
    #1

    I want to have a default focus on a widget when the program is running. For example, I joined QLineEdit_1 and QLineEdit_2. When the program is running, the default focus is always displayed in QLineEdit_1 above, how to set QLineEdit_2 to get the focus firstly?
    Thanks in advance for any advice.

    1 Reply Last reply
    0
    • V Offline
      V Offline
      vivaladav
      wrote on last edited by
      #2

      Probably what you need is setFocusProxy.

      If that doesn't work you can set the focus "manually" after the widget has been shown.

      Davide Coppola
      blog | Linkedin | Twitter

      1 Reply Last reply
      1
      • Vinod KuntojiV Offline
        Vinod KuntojiV Offline
        Vinod Kuntoji
        wrote on last edited by
        #3

        @Qt_crazyer ,

        Hi,

        lineEdit2->setFocus();

        C++, Qt, Qt Quick Developer,
        PthinkS, Bangalore

        1 Reply Last reply
        0
        • Qt_crazyerQ Offline
          Qt_crazyerQ Offline
          Qt_crazyer
          wrote on last edited by Qt_crazyer
          #4

          I have used this function. But it doesn't work.

          study::study(QWidget *parent)
              : QMainWindow(parent)
          {
              widget = new QWidget;
              l1 = new QLineEdit;
              l2 = new QLineEdit;
              m1 = new QLabel(tr("Label1"));
              m2 = new QLabel(tr("Lable2"));
              lay = new QHBoxLayout(widget);
              lay->addWidget(m1);
              lay->addWidget(l1);
              lay->addWidget(m2);
              lay->addWidget(l2);
              lay->setSpacing(10);
              lay->setMargin(10);
              l2->setFocus();
              this->setCentralWidget(widget);
          }
          

          Should this function be used here?

          Taz742T V 2 Replies Last reply
          0
          • Qt_crazyerQ Qt_crazyer

            I have used this function. But it doesn't work.

            study::study(QWidget *parent)
                : QMainWindow(parent)
            {
                widget = new QWidget;
                l1 = new QLineEdit;
                l2 = new QLineEdit;
                m1 = new QLabel(tr("Label1"));
                m2 = new QLabel(tr("Lable2"));
                lay = new QHBoxLayout(widget);
                lay->addWidget(m1);
                lay->addWidget(l1);
                lay->addWidget(m2);
                lay->addWidget(l2);
                lay->setSpacing(10);
                lay->setMargin(10);
                l2->setFocus();
                this->setCentralWidget(widget);
            }
            

            Should this function be used here?

            Taz742T Offline
            Taz742T Offline
            Taz742
            wrote on last edited by Taz742
            #5

            @Qt_crazyer
            Please try l2->setFocus(Qt::otherFocusReason);

            Do what you want.

            Qt_crazyerQ 1 Reply Last reply
            0
            • Taz742T Taz742

              @Qt_crazyer
              Please try l2->setFocus(Qt::otherFocusReason);

              Qt_crazyerQ Offline
              Qt_crazyerQ Offline
              Qt_crazyer
              wrote on last edited by Qt_crazyer
              #6

              @Taz742
              Yes, I have also tried this function, but it doesn't work. This is just a sample program, it is very simple. I do not understand why?...
              0_1512038660188_cd874806-0e47-4208-a215-6842c3404795-image.png

              Taz742T 1 Reply Last reply
              0
              • Qt_crazyerQ Qt_crazyer

                @Taz742
                Yes, I have also tried this function, but it doesn't work. This is just a sample program, it is very simple. I do not understand why?...
                0_1512038660188_cd874806-0e47-4208-a215-6842c3404795-image.png

                Taz742T Offline
                Taz742T Offline
                Taz742
                wrote on last edited by
                #7

                @Qt_crazyer
                An other solution is to use a singleShot timer :

                
                QTimer::singleShot(0,lineEdit,SLOT(setFocus()));
                

                The focus will then be set once the application is free.

                See solution follow the link..

                Do what you want.

                Qt_crazyerQ 1 Reply Last reply
                1
                • Qt_crazyerQ Qt_crazyer

                  I have used this function. But it doesn't work.

                  study::study(QWidget *parent)
                      : QMainWindow(parent)
                  {
                      widget = new QWidget;
                      l1 = new QLineEdit;
                      l2 = new QLineEdit;
                      m1 = new QLabel(tr("Label1"));
                      m2 = new QLabel(tr("Lable2"));
                      lay = new QHBoxLayout(widget);
                      lay->addWidget(m1);
                      lay->addWidget(l1);
                      lay->addWidget(m2);
                      lay->addWidget(l2);
                      lay->setSpacing(10);
                      lay->setMargin(10);
                      l2->setFocus();
                      this->setCentralWidget(widget);
                  }
                  

                  Should this function be used here?

                  V Offline
                  V Offline
                  vivaladav
                  wrote on last edited by
                  #8

                  @Qt_crazyer I am assuming l2 is a member (using "m" as prefix for members would help).

                  Just set the focus with a delay, in your case:

                      QTimer::singleShot(0, this, [this]
                      {
                          l2->setFocus();
                      });
                  

                  Davide Coppola
                  blog | Linkedin | Twitter

                  Qt_crazyerQ 1 Reply Last reply
                  1
                  • Taz742T Taz742

                    @Qt_crazyer
                    An other solution is to use a singleShot timer :

                    
                    QTimer::singleShot(0,lineEdit,SLOT(setFocus()));
                    

                    The focus will then be set once the application is free.

                    See solution follow the link..

                    Qt_crazyerQ Offline
                    Qt_crazyerQ Offline
                    Qt_crazyer
                    wrote on last edited by
                    #9

                    @Taz742
                    Thank you so much. The problem has been solved. Thank you for your patient guidance.

                    1 Reply Last reply
                    0
                    • V vivaladav

                      @Qt_crazyer I am assuming l2 is a member (using "m" as prefix for members would help).

                      Just set the focus with a delay, in your case:

                          QTimer::singleShot(0, this, [this]
                          {
                              l2->setFocus();
                          });
                      
                      Qt_crazyerQ Offline
                      Qt_crazyerQ Offline
                      Qt_crazyer
                      wrote on last edited by
                      #10

                      @vivaladav
                      Thank you for your reply. This method is really effective.

                      Taz742T 1 Reply Last reply
                      0
                      • Qt_crazyerQ Qt_crazyer

                        @vivaladav
                        Thank you for your reply. This method is really effective.

                        Taz742T Offline
                        Taz742T Offline
                        Taz742
                        wrote on last edited by Taz742
                        #11

                        @Qt_crazyer
                        Nope. Do not forget mark this topic as SOLVED.

                        Do what you want.

                        1 Reply Last reply
                        0
                        • M Offline
                          M Offline
                          mpergand
                          wrote on last edited by
                          #12

                          What about this ?

                          setTabOrder(l2,l1);
                          
                          Qt_crazyerQ 1 Reply Last reply
                          0
                          • M mpergand

                            What about this ?

                            setTabOrder(l2,l1);
                            
                            Qt_crazyerQ Offline
                            Qt_crazyerQ Offline
                            Qt_crazyer
                            wrote on last edited by
                            #13

                            @mpergand
                            Thank you for your advice. I have tried this function. This is indeed an effective way.

                            1 Reply Last reply
                            0
                            • V Offline
                              V Offline
                              vivaladav
                              wrote on last edited by
                              #14

                              Keep in mind that setTabOrder might not be the right solution if you introduce more widgets (as in any normal working application).

                              Davide Coppola
                              blog | Linkedin | Twitter

                              1 Reply Last reply
                              2

                              • Login

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