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. comboBox runtime enable/disable
Qt 6.11 is out! See what's new in the release blog

comboBox runtime enable/disable

Scheduled Pinned Locked Moved Solved General and Desktop
29 Posts 7 Posters 19.5k 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.
  • TheCipo76T Offline
    TheCipo76T Offline
    TheCipo76
    wrote on last edited by
    #1

    Hi,
    i have 2 ComboBox

    when i select a value in 1st ComboBox
    i have to enable or disable the 2nd ComboBox

    i try with:
    ComboBox->setEnabled(true)
    ComboBox->setDisabled (true)

    but don't work..

    i read about this problem in this post:

    https://forum.qt.io/topic/37207/setenabled-vs-setdisabled/11

    but i don't know how to do it.
    Anyone can help me please?

    RatzzR 1 Reply Last reply
    0
    • TheCipo76T TheCipo76

      Hi,
      i have 2 ComboBox

      when i select a value in 1st ComboBox
      i have to enable or disable the 2nd ComboBox

      i try with:
      ComboBox->setEnabled(true)
      ComboBox->setDisabled (true)

      but don't work..

      i read about this problem in this post:

      https://forum.qt.io/topic/37207/setenabled-vs-setdisabled/11

      but i don't know how to do it.
      Anyone can help me please?

      RatzzR Offline
      RatzzR Offline
      Ratzz
      wrote on last edited by
      #2

      @TheCipo76 said in comboBox runtime enable/disable:

      i try with:

      Can you show me the whole slot code?

      --Alles ist gut.

      1 Reply Last reply
      0
      • TheCipo76T Offline
        TheCipo76T Offline
        TheCipo76
        wrote on last edited by TheCipo76
        #3

        i've created an array of 10 ComboBox populated from DB
        with this code:

        q.prepare("Select RAGSOC from FORNITORI order by RAGSOC");
            for (int i = 0; i < 10; i++) {
                array_Fornitore[i] = new QComboBox;
                ui->gridLayout_5->addWidget(array_Fornitore[i]);
                array_Fornitore[i]->setFixedWidth(300);
                array_Fornitore[i]->setFixedHeight(30);
                //Caricamento Combobox FORNITORE DA DATABASE
                if (q.exec()) {
                    QSqlQueryModel *tModel = new QSqlQueryModel(this);
                    tModel->setQuery(q);
                    array_Fornitore[i]->setModel(tModel);
                }
                array_Fornitore[i]->setDisabled(true);
            }
        

        then i try to enable with this code (on pushbutton click):

        if (array_Origine[i]->currentText() == "INTERNA"){
                                array_Fornitore[i]->setEnabled(true);
                                //array_Fornitore[i]->clear();
                                return;
                        }
        
        RatzzR TheCipo76T 2 Replies Last reply
        0
        • TheCipo76T TheCipo76

          i've created an array of 10 ComboBox populated from DB
          with this code:

          q.prepare("Select RAGSOC from FORNITORI order by RAGSOC");
              for (int i = 0; i < 10; i++) {
                  array_Fornitore[i] = new QComboBox;
                  ui->gridLayout_5->addWidget(array_Fornitore[i]);
                  array_Fornitore[i]->setFixedWidth(300);
                  array_Fornitore[i]->setFixedHeight(30);
                  //Caricamento Combobox FORNITORE DA DATABASE
                  if (q.exec()) {
                      QSqlQueryModel *tModel = new QSqlQueryModel(this);
                      tModel->setQuery(q);
                      array_Fornitore[i]->setModel(tModel);
                  }
                  array_Fornitore[i]->setDisabled(true);
              }
          

          then i try to enable with this code (on pushbutton click):

          if (array_Origine[i]->currentText() == "INTERNA"){
                                  array_Fornitore[i]->setEnabled(true);
                                  //array_Fornitore[i]->clear();
                                  return;
                          }
          
          RatzzR Offline
          RatzzR Offline
          Ratzz
          wrote on last edited by Ratzz
          #4

          @TheCipo76 said in comboBox runtime enable/disable:

          array_Fornitore[i]->setEnabled(true);

          can you just try with setDisabled(false) ?

          --Alles ist gut.

          TheCipo76T 1 Reply Last reply
          0
          • SGaistS Offline
            SGaistS Offline
            SGaist
            Lifetime Qt Champion
            wrote on last edited by
            #5

            Hi,

            You are enabling the same combo box that you are checking.

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

            TheCipo76T 1 Reply Last reply
            0
            • RatzzR Ratzz

              @TheCipo76 said in comboBox runtime enable/disable:

              array_Fornitore[i]->setEnabled(true);

              can you just try with setDisabled(false) ?

              TheCipo76T Offline
              TheCipo76T Offline
              TheCipo76
              wrote on last edited by
              #6

              @Ratzz
              yes i've already try: don't work

              1 Reply Last reply
              0
              • SGaistS SGaist

                Hi,

                You are enabling the same combo box that you are checking.

                TheCipo76T Offline
                TheCipo76T Offline
                TheCipo76
                wrote on last edited by
                #7

                @SGaist
                i'm checking array_Origine[i]..
                depending to it i disable array_Fornitore[i]

                why you tell me that is the same combobox??

                SGaistS 1 Reply Last reply
                0
                • TheCipo76T TheCipo76

                  i've created an array of 10 ComboBox populated from DB
                  with this code:

                  q.prepare("Select RAGSOC from FORNITORI order by RAGSOC");
                      for (int i = 0; i < 10; i++) {
                          array_Fornitore[i] = new QComboBox;
                          ui->gridLayout_5->addWidget(array_Fornitore[i]);
                          array_Fornitore[i]->setFixedWidth(300);
                          array_Fornitore[i]->setFixedHeight(30);
                          //Caricamento Combobox FORNITORE DA DATABASE
                          if (q.exec()) {
                              QSqlQueryModel *tModel = new QSqlQueryModel(this);
                              tModel->setQuery(q);
                              array_Fornitore[i]->setModel(tModel);
                          }
                          array_Fornitore[i]->setDisabled(true);
                      }
                  

                  then i try to enable with this code (on pushbutton click):

                  if (array_Origine[i]->currentText() == "INTERNA"){
                                          array_Fornitore[i]->setEnabled(true);
                                          //array_Fornitore[i]->clear();
                                          return;
                                  }
                  
                  TheCipo76T Offline
                  TheCipo76T Offline
                  TheCipo76
                  wrote on last edited by
                  #8

                  @TheCipo76
                  i have to do this without pushbutton..

                  i read something about QEvent..

                  is the right and only way?

                  1 Reply Last reply
                  0
                  • TheCipo76T TheCipo76

                    @SGaist
                    i'm checking array_Origine[i]..
                    depending to it i disable array_Fornitore[i]

                    why you tell me that is the same combobox??

                    SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by
                    #9

                    @TheCipo76 said in comboBox runtime enable/disable:

                    @SGaist
                    i'm checking array_Origine[i]..
                    depending to it i disable array_Fornitore[i]

                    why you tell me that is the same combobox??

                    My bad, the code renderer mislead me.

                    Anyway, how did you ensure that you are correctly going through that if ?

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

                    TheCipo76T 1 Reply Last reply
                    0
                    • SGaistS SGaist

                      @TheCipo76 said in comboBox runtime enable/disable:

                      @SGaist
                      i'm checking array_Origine[i]..
                      depending to it i disable array_Fornitore[i]

                      why you tell me that is the same combobox??

                      My bad, the code renderer mislead me.

                      Anyway, how did you ensure that you are correctly going through that if ?

                      TheCipo76T Offline
                      TheCipo76T Offline
                      TheCipo76
                      wrote on last edited by TheCipo76
                      #10

                      @SGaist said in comboBox runtime enable/disable:

                      Anyway, how did you ensure that you are correctly going through that if ?

                      on pushbutton click i check all (one by one) members of my form with a loop
                      when arrive to this "if" i've already checked others widget ( arrays of combobox and lineedit)

                      with a dedicated pushbutton i can enable / disable array_Fornitore[i] combobox
                      but i wanto to do it without 10 button (array have 10 item) and 10 click!

                      when i select (click)"INTERNA" in combobox array_Origine[i] i want disable array_Fornitore[i]
                      without any other click and in real time.

                      1 Reply Last reply
                      0
                      • SGaistS Offline
                        SGaistS Offline
                        SGaist
                        Lifetime Qt Champion
                        wrote on last edited by
                        #11

                        That's clear, what I'm asking is whether you used the debugger or a simple qDebug statement to ensure that your code went through the if that is supposed to disable the other combo box.

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

                        TheCipo76T 1 Reply Last reply
                        0
                        • SGaistS SGaist

                          That's clear, what I'm asking is whether you used the debugger or a simple qDebug statement to ensure that your code went through the if that is supposed to disable the other combo box.

                          TheCipo76T Offline
                          TheCipo76T Offline
                          TheCipo76
                          wrote on last edited by
                          #12

                          @SGaist
                          i've check it with a simple QMessageBox inside the if statement:
                          my code went throught the if.

                          Cobra91151C 1 Reply Last reply
                          0
                          • TheCipo76T TheCipo76

                            @SGaist
                            i've check it with a simple QMessageBox inside the if statement:
                            my code went throught the if.

                            Cobra91151C Offline
                            Cobra91151C Offline
                            Cobra91151
                            wrote on last edited by Cobra91151
                            #13

                            @TheCipo76

                            Hi! You can also try to disable/enable the specific item of QComboBox like this:

                            Disable:

                            qobject_cast<QStandardItemModel*>(comboBox->model())->item(0)->setEnabled(false);
                            

                            Enable:

                            qobject_cast<QStandardItemModel*>(comboBox->model())->item(0)->setEnabled(true);
                            

                            This code disables/enables the first combobox item.

                            Also if you want to disable/enable the combobox, you can simplify it with connects. For example, when you select the value from the 1st combobox (signal activated) then emit your signal to disable the second combobox.

                            T 1 Reply Last reply
                            0
                            • SGaistS Offline
                              SGaistS Offline
                              SGaist
                              Lifetime Qt Champion
                              wrote on last edited by
                              #14

                              Silly question: do you have any logic that re-enables that combo box ?

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

                              TheCipo76T 1 Reply Last reply
                              0
                              • SGaistS SGaist

                                Silly question: do you have any logic that re-enables that combo box ?

                                TheCipo76T Offline
                                TheCipo76T Offline
                                TheCipo76
                                wrote on last edited by TheCipo76
                                #15

                                @SGaist
                                yes but work only with a pusbutton click

                                i think that i have to use the click event for enable / disable in real time

                                but combobox is added dinamically in runtime..

                                i've tried with:

                                connect(array_Fornitore[i], SIGNAL(clicked()), this, SLOT(ATTDIS(int i)));
                                

                                Dialog .cpp

                                    void ATTDIS(int i) {
                                    if (array_Origine[i].currentText == "ESTERNA") {
                                        array_Fornitore[i]->setDisabled(false);
                                    }
                                    if (array_Origine[i].currentText == "INTERNA") {
                                        array_Fornitore[i]->setDisabled(true);
                                    }
                                }
                                }
                                

                                dialog .h

                                void ATTDIS(int i);
                                

                                but don't work..
                                (array_Origine[i] use of undeclared identifier)
                                (array_Fornitore[i] use of undeclared identifier)
                                how can i pass array_Orgine[i] and array_Fornitore[i] to the function??

                                JonBJ M 2 Replies Last reply
                                0
                                • TheCipo76T TheCipo76

                                  @SGaist
                                  yes but work only with a pusbutton click

                                  i think that i have to use the click event for enable / disable in real time

                                  but combobox is added dinamically in runtime..

                                  i've tried with:

                                  connect(array_Fornitore[i], SIGNAL(clicked()), this, SLOT(ATTDIS(int i)));
                                  

                                  Dialog .cpp

                                      void ATTDIS(int i) {
                                      if (array_Origine[i].currentText == "ESTERNA") {
                                          array_Fornitore[i]->setDisabled(false);
                                      }
                                      if (array_Origine[i].currentText == "INTERNA") {
                                          array_Fornitore[i]->setDisabled(true);
                                      }
                                  }
                                  }
                                  

                                  dialog .h

                                  void ATTDIS(int i);
                                  

                                  but don't work..
                                  (array_Origine[i] use of undeclared identifier)
                                  (array_Fornitore[i] use of undeclared identifier)
                                  how can i pass array_Orgine[i] and array_Fornitore[i] to the function??

                                  JonBJ Offline
                                  JonBJ Offline
                                  JonB
                                  wrote on last edited by
                                  #16

                                  @TheCipo76
                                  No offence intended, but from the same sort of thing in your previous posts you might like to read up on variable scope. And if you do understand that for normal variables, exactly the same applies when they are arrays.

                                  Rather than worrying about how to pass these arrays as parameters each time to slots and other individual functions, wouldn't your code logic be simpler if they were defined as member variables of your class (the dialog)?

                                  TheCipo76T 1 Reply Last reply
                                  2
                                  • JonBJ JonB

                                    @TheCipo76
                                    No offence intended, but from the same sort of thing in your previous posts you might like to read up on variable scope. And if you do understand that for normal variables, exactly the same applies when they are arrays.

                                    Rather than worrying about how to pass these arrays as parameters each time to slots and other individual functions, wouldn't your code logic be simpler if they were defined as member variables of your class (the dialog)?

                                    TheCipo76T Offline
                                    TheCipo76T Offline
                                    TheCipo76
                                    wrote on last edited by TheCipo76
                                    #17

                                    @JonB
                                    this is my dialog .h:

                                    class inserisciarticolo : public QDialog
                                    {
                                        Q_OBJECT
                                    
                                    public:
                                        explicit inserisciarticolo(QWidget *parent = nullptr);
                                        ~inserisciarticolo();
                                    
                                    
                                    private slots:
                                    
                                        void on_pushButton_Annulla_clicked();
                                    
                                        void on_pushButton_Inserisci_clicked();
                                    
                                        //void ATTDIS(int i);
                                    
                                    private:
                                        Ui::inserisciarticolo *ui;
                                    
                                        QSqlDatabase aDatabase;
                                        QSqlQuery *aModel;
                                    
                                        //Array Componenti
                                        QLineEdit *array_Codice[10];
                                        QLineEdit *array_Descrizione[10];
                                        QSpinBox *array_Qta[10];
                                        QComboBox *array_Origine[10];  //<--------------------
                                        QComboBox *array_Fornitore[10]; //<------------------
                                    
                                    1 Reply Last reply
                                    0
                                    • TheCipo76T TheCipo76

                                      @SGaist
                                      yes but work only with a pusbutton click

                                      i think that i have to use the click event for enable / disable in real time

                                      but combobox is added dinamically in runtime..

                                      i've tried with:

                                      connect(array_Fornitore[i], SIGNAL(clicked()), this, SLOT(ATTDIS(int i)));
                                      

                                      Dialog .cpp

                                          void ATTDIS(int i) {
                                          if (array_Origine[i].currentText == "ESTERNA") {
                                              array_Fornitore[i]->setDisabled(false);
                                          }
                                          if (array_Origine[i].currentText == "INTERNA") {
                                              array_Fornitore[i]->setDisabled(true);
                                          }
                                      }
                                      }
                                      

                                      dialog .h

                                      void ATTDIS(int i);
                                      

                                      but don't work..
                                      (array_Origine[i] use of undeclared identifier)
                                      (array_Fornitore[i] use of undeclared identifier)
                                      how can i pass array_Orgine[i] and array_Fornitore[i] to the function??

                                      M Offline
                                      M Offline
                                      mpergand
                                      wrote on last edited by
                                      #18

                                      @TheCipo76 said in comboBox runtime enable/disable:

                                      connect(array_Fornitore[i], SIGNAL(clicked()), this, SLOT(ATTDIS(int i)));

                                      You need to capture the var i in a lambda:

                                      connect(array_Fornitore[i], &QComboBox::clicked, [i]() 
                                      { 
                                      ATTDIS(i);
                                      });
                                      
                                      TheCipo76T 2 Replies Last reply
                                      2
                                      • M mpergand

                                        @TheCipo76 said in comboBox runtime enable/disable:

                                        connect(array_Fornitore[i], SIGNAL(clicked()), this, SLOT(ATTDIS(int i)));

                                        You need to capture the var i in a lambda:

                                        connect(array_Fornitore[i], &QComboBox::clicked, [i]() 
                                        { 
                                        ATTDIS(i);
                                        });
                                        
                                        TheCipo76T Offline
                                        TheCipo76T Offline
                                        TheCipo76
                                        wrote on last edited by
                                        #19

                                        @mpergand
                                        it's very interesting..

                                        i can capture i var and pass it to a slot function
                                        if i have understand..

                                        but once i have done it what i have to do??
                                        slot function do what i need?

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

                                          The lambda function becomes the slot function.
                                          You probably need to capture 'this' as well to get access to methods and vars of the class instance.

                                          TheCipo76T 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