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. Problem getting QComboBox from QWidget
Forum Updated to NodeBB v4.3 + New Features

Problem getting QComboBox from QWidget

Scheduled Pinned Locked Moved General and Desktop
14 Posts 5 Posters 5.0k 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 Offline
    D Offline
    darkp03
    wrote on last edited by darkp03
    #5

    Yes, it returns a valid Widget.

    This is how I place the ComboBox

    QComboBox *Index;
    Index=new QComboBox;
    QStringList Names;
    Names<<"64kbps"<<"32kbps"<<"16kbps";
    Index->addItems(Names);
    //Here I have created the QComboBox, now I place it in a Widget, and I allign it to the center
    
    QWidget *Widget=new QWidget;
    QHBoxLayout *Layout=new QHBoxLayout(Widget);
    Layout->addWidget(Index);
    Layout->setAlignment(Qt::AlignCenter);
    Widget->setLayout(Layout)
    
    ui->tableWidget_DataTs->setCellWidget(0,2,Widget);
    
    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #6

      So cellWidget doesn't return a combo box, it returns a widget containing a layout containing your 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

      M 1 Reply Last reply
      2
      • SGaistS SGaist

        So cellWidget doesn't return a combo box, it returns a widget containing a layout containing your combo box

        M Offline
        M Offline
        maratk1n
        wrote on last edited by
        #7

        @SGaist so, how we can cast it to QComboBox*?

        jsulmJ 1 Reply Last reply
        0
        • M maratk1n

          @SGaist so, how we can cast it to QComboBox*?

          jsulmJ Online
          jsulmJ Online
          jsulm
          Lifetime Qt Champion
          wrote on last edited by
          #8

          @maratk1n Use http://doc.qt.io/qt-5/qobject.html#children to get children widgets of ui->tableWidget_DataTs->cellWidget(1,2); and go through the children list until you can successfully cast to QComboBox*.

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

          M 1 Reply Last reply
          5
          • jsulmJ jsulm

            @maratk1n Use http://doc.qt.io/qt-5/qobject.html#children to get children widgets of ui->tableWidget_DataTs->cellWidget(1,2); and go through the children list until you can successfully cast to QComboBox*.

            M Offline
            M Offline
            maratk1n
            wrote on last edited by maratk1n
            #9

            @jsulm Thank you! This helped solve my problem.

            Create table:

            for(int i = 0; i < dataCount; i++){
                ui->tableWidget->horizontalHeader()->setSectionResizeMode(i, QHeaderView::Stretch);
                for (int j = 1; j < rowCount; j++) {
                    QWidget *checkBoxWidget = new QWidget();
                    QCheckBox *checkBox = new QCheckBox();
                    QHBoxLayout *layoutCheckBox = new QHBoxLayout(checkBoxWidget);
                    checkBox->setChecked(false);
                    layoutCheckBox->addWidget(checkBox);
                    layoutCheckBox->setAlignment(Qt::AlignCenter);
                    layoutCheckBox->setContentsMargins(0,0,0,0);
                    ui->tableWidget->setCellWidget(j, i, checkBoxWidget);
                }
                QComboBox* comboBox = new QComboBox();
                comboBox->setEnabled(false);
                comboBox->addItems(dataTypes);
                ui->tableWidget->setCellWidget(0, i, comboBox);
            }
            

            Read checkboxes:

            for (int i = 0; i < ui->dataCount->currentIndex(); i++) {
                QComboBox *dataType = static_cast<QComboBox*>(ui->tableWidget->cellWidget(0, i));
                QCheckBox *inversion = static_cast<QCheckBox*>(ui->tableWidget->cellWidget(1, i)->children().last());
                QCheckBox *plot = static_cast<QCheckBox*>(ui->tableWidget->cellWidget(2, i)->children().last());
                QCheckBox *bitwise = static_cast<QCheckBox*>(ui->tableWidget->cellWidget(3, i)->children().last());
                device->setRDataType(str2QVariant(dataType->currentText()), inversion->isChecked());
                if (plot->isChecked()) { // plot needed
                }
                if (bitwise->isChecked()) { // bit representation needed
                }
            }
            
            jsulmJ 1 Reply Last reply
            0
            • M maratk1n

              @jsulm Thank you! This helped solve my problem.

              Create table:

              for(int i = 0; i < dataCount; i++){
                  ui->tableWidget->horizontalHeader()->setSectionResizeMode(i, QHeaderView::Stretch);
                  for (int j = 1; j < rowCount; j++) {
                      QWidget *checkBoxWidget = new QWidget();
                      QCheckBox *checkBox = new QCheckBox();
                      QHBoxLayout *layoutCheckBox = new QHBoxLayout(checkBoxWidget);
                      checkBox->setChecked(false);
                      layoutCheckBox->addWidget(checkBox);
                      layoutCheckBox->setAlignment(Qt::AlignCenter);
                      layoutCheckBox->setContentsMargins(0,0,0,0);
                      ui->tableWidget->setCellWidget(j, i, checkBoxWidget);
                  }
                  QComboBox* comboBox = new QComboBox();
                  comboBox->setEnabled(false);
                  comboBox->addItems(dataTypes);
                  ui->tableWidget->setCellWidget(0, i, comboBox);
              }
              

              Read checkboxes:

              for (int i = 0; i < ui->dataCount->currentIndex(); i++) {
                  QComboBox *dataType = static_cast<QComboBox*>(ui->tableWidget->cellWidget(0, i));
                  QCheckBox *inversion = static_cast<QCheckBox*>(ui->tableWidget->cellWidget(1, i)->children().last());
                  QCheckBox *plot = static_cast<QCheckBox*>(ui->tableWidget->cellWidget(2, i)->children().last());
                  QCheckBox *bitwise = static_cast<QCheckBox*>(ui->tableWidget->cellWidget(3, i)->children().last());
                  device->setRDataType(str2QVariant(dataType->currentText()), inversion->isChecked());
                  if (plot->isChecked()) { // plot needed
                  }
                  if (bitwise->isChecked()) { // bit representation needed
                  }
              }
              
              jsulmJ Online
              jsulmJ Online
              jsulm
              Lifetime Qt Champion
              wrote on last edited by
              #10

              @maratk1n One note: you should ALWAYS check pointers! Else your app will crash if any of them is null or dangling pointer.

              QComboBox *dataType = static_cast<QComboBox*>(ui->tableWidget->cellWidget(0, i));
              ...
              if (plot && plot->isChecked()) {
              

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

              M 1 Reply Last reply
              3
              • jsulmJ jsulm

                @maratk1n One note: you should ALWAYS check pointers! Else your app will crash if any of them is null or dangling pointer.

                QComboBox *dataType = static_cast<QComboBox*>(ui->tableWidget->cellWidget(0, i));
                ...
                if (plot && plot->isChecked()) {
                
                M Offline
                M Offline
                maratk1n
                wrote on last edited by maratk1n
                #11

                @jsulm sure, you are right :)
                With dynamic_cast I should try catch exception bad_cast with references or check pointer as well as with static_cast.

                JonBJ 1 Reply Last reply
                0
                • M maratk1n

                  @jsulm sure, you are right :)
                  With dynamic_cast I should try catch exception bad_cast with references or check pointer as well as with static_cast.

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

                  @maratk1n

                  With dynamic_cast I should try catch exception bad_cast

                  ? dynamic_cast<> returns nullptr if not of right type, it does not throw?

                  M 1 Reply Last reply
                  1
                  • JonBJ JonB

                    @maratk1n

                    With dynamic_cast I should try catch exception bad_cast

                    ? dynamic_cast<> returns nullptr if not of right type, it does not throw?

                    M Offline
                    M Offline
                    maratk1n
                    wrote on last edited by
                    #13

                    @JonB

                    Perhaps I incorrectly expressed my thought, but I wanted to say this:

                    Otherwise, the runtime check fails. If the dynamic_cast is used on pointers, the null pointer value of type new_type is returned. If it was used on references, the exception std::bad_cast is thrown.

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

                      Beware: static_cast doesn't do any checks so unless it was given a null pointer, it will not return a nullptr.

                      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
                      0

                      • Login

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