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. [SOLVED] [QComboBox and QSqlRelationalDelegate] How to show conditional content in a QComboBox
Forum Updated to NodeBB v4.3 + New Features

[SOLVED] [QComboBox and QSqlRelationalDelegate] How to show conditional content in a QComboBox

Scheduled Pinned Locked Moved General and Desktop
3 Posts 1 Posters 3.4k Views 1 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.
  • V Offline
    V Offline
    valandil211
    wrote on last edited by
    #1

    Hello Qt Devs!

    For my GUI to a PostgreSQL DB, I want to show data in combo boxes. However, some of my data has something alike a tree-structure. In short, I want the data in a second ComboBox to be affected by the data in a first ComboBox.

    It seems to be doable with a relational delegate, but it doesn't quite work.

    @// Populate the group ComboBox
    groupModel = new QSqlRelationalTableModel(this, QSqlDatabase::database("******"));
    groupModel->setTable(""TB_Groupe"");
    groupModel->setSort(groupModel->fieldIndex("GR_Nom"), Qt::AscendingOrder);
    groupModel->select();

    ui->MW_groupComboBox->setModel(groupModel);
    ui->MW_groupComboBox->setModelColumn(groupModel->fieldIndex("GR_Nom"));
    
    catModel = new QSqlRelationalTableModel(this, QSqlDatabase::database("*****"));
    catModel->setTable("\"TB_Categorie\"");
    catModel->setSort(catModel->fieldIndex("CAT_Nom"), Qt::AscendingOrder);
    catModel->setRelation(1, QSqlRelation("\"TB_Groupe\"","IndexCategorie", "GR_Nom"));
    catModel->select();
    
    ui->MW_catComboBox->setModel(catModel);
    ui->MW_catComboBox->setModelColumn(catModel->fieldIndex("CAT_Nom"));@
    

    Any ideas?

    Joey Dumont

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

      This does not seem to work, either.

      @// Populate the group ComboBox
      groupModel = new QSqlRelationalTableModel(this, QSqlDatabase::database("*****"));
      groupModel->setTable(""TB_Groupe"");
      groupModel->setSort(groupModel->fieldIndex("GR_Nom"), Qt::AscendingOrder);
      groupModel->select();

      ui->MW_groupComboBox->setModel(groupModel);
      ui->MW_groupComboBox->setModelColumn(groupModel->fieldIndex("GR_Nom"));
      
      // Populate category ComboBox according to Group ComboBox
      catModel = new QSqlRelationalTableModel(this, QSqlDatabase::database("*******"));
      catModel->setTable("\"TB_Categorie\"");
      catModel->setSort(catModel->fieldIndex("CAT_Nom"), Qt::AscendingOrder);
      catModel->setFilter("CAT_IndexGroupe =" % ui->MW_groupComboBox->currentIndex());
      catModel->select();
      
      ui->MW_catComboBox->setModel(catModel);
      ui->MW_catComboBox->setModelColumn(catModel->fieldIndex("CAT_Nom"));@
      

      Joey Dumont

      1 Reply Last reply
      0
      • V Offline
        V Offline
        valandil211
        wrote on last edited by
        #3

        Found easy solution by using signals and slots. This system rocks!

        @// Populate the group ComboBox
        groupModel = new QSqlRelationalTableModel(this, QSqlDatabase::database("******"));
        groupModel->setTable(""TB_Groupe"");
        groupModel->setSort(groupModel->fieldIndex("GR_Nom"), Qt::AscendingOrder);
        groupModel->select();

        ui->MW_groupComboBox->setModel(groupModel);
        ui->MW_groupComboBox->setModelColumn(groupModel->fieldIndex("GR_Nom"));
        
        // Populate category ComboBox according to Group ComboBox
        catModel = new QSqlRelationalTableModel(this, QSqlDatabase::database("*******"));
        catModel->setTable("\"TB_Categorie\"");
        catModel->setFilter("\"CAT_IndexGroupe\" = " % QString::number(ui->MW_groupComboBox->currentIndex()+1));
        catModel->setSort(catModel->fieldIndex("CAT_Nom"), Qt::AscendingOrder);
        catModel->select();
        
        ui->MW_catComboBox->setModel(catModel);
        ui->MW_catComboBox->setModelColumn(catModel->fieldIndex("CAT_Nom"));
        
        connect(ui->MW_groupComboBox,
                SIGNAL(currentIndexChanged(int)),
                this,
                SLOT(RefreshCategory(int)));
        

        }

        void MainWindow::RefreshCategory(int choice)
        {
        catModel->setFilter(""CAT_IndexGroupe" = " % QString::number(choice+1));
        catModel->select();

        ui->MW_catComboBox->setModel(catModel);
        ui->MW_catComboBox->setModelColumn(catModel->fieldIndex("CAT_Nom"));
        

        }@

        Joey Dumont

        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