Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. QSqlRelationalModel and QCombobox
Qt 6.11 is out! See what's new in the release blog

QSqlRelationalModel and QCombobox

Scheduled Pinned Locked Moved Solved German
2 Posts 1 Posters 663 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.
  • W Offline
    W Offline
    wolfgang.hammes
    wrote on last edited by
    #1

    Hallo,

    ich habe folgendes Problem, an dem ich mir die Zähne ausbeiße:

    Ich habe eine Tabelle, in der die Felder "receiver_id" und "author_id" enthalten sind. Diese verweisen auf die Tabellen address und author.

    model = new QSqlRelationalTableModel(this);
        model->setTable("letter");
        model->setEditStrategy(QSqlTableModel::OnManualSubmit);
        receiverIndex = model->fieldIndex("receiver_id");
        authorIndex = model->fieldIndex("author_id");
        model->setRelation(receiverIndex, QSqlRelation("address", "id", "name"));
        model->setRelation(authorIndex, QSqlRelation("author", "id", "name"));
    /* andere statements*/
    QSqlTableModel *authorRelModel = model->relationModel(authorIndex);
        authorComboBox->setModel(authorRelModel);
        authorComboBox->setModelColumn(authorRelModel->fieldIndex("name"));
        QSqlTableModel *receiverRelModel = model->relationModel(receiverIndex);
        receiverComboBox->setModel(receiverRelModel);
        receiverComboBox->setModelColumn(receiverRelModel->fieldIndex("name"));
    /* andere statements */
    mapper->setItemDelegate(new QSqlRelationalDelegate(this));
        mapper->addMapping(titleLineEdit, model->fieldIndex("title"));
        mapper->addMapping(authorComboBox, authorIndex);
        mapper->addMapping(receiverComboBox, receiverIndex);
    

    Das funktioniert auch richtig gut: Die werden in der QComboBox mit den richtigen Werten angezeigt und die Modelle (die SQL-Tabelle) enthalten nach dem Submit die richtigen Daten.

    Ich benötige von der ComboBox für eine Abfrage von weiteren Feldern den Wert receiver_id, bekomme aber lediglich den angezeigten Namen. (QVariant(QString, "Müller"))

    receiverComboBox->currentData(Qt::EditRole);

    Gibt es irgendeine Möglichkeit diesen Wert von der Combobox zu bekommen? Wahrscheinlich übersehe ich irgendetwas.

    Wäre toll, wenn jemand die Lösung kennt.

    W 1 Reply Last reply
    0
    • W wolfgang.hammes

      Hallo,

      ich habe folgendes Problem, an dem ich mir die Zähne ausbeiße:

      Ich habe eine Tabelle, in der die Felder "receiver_id" und "author_id" enthalten sind. Diese verweisen auf die Tabellen address und author.

      model = new QSqlRelationalTableModel(this);
          model->setTable("letter");
          model->setEditStrategy(QSqlTableModel::OnManualSubmit);
          receiverIndex = model->fieldIndex("receiver_id");
          authorIndex = model->fieldIndex("author_id");
          model->setRelation(receiverIndex, QSqlRelation("address", "id", "name"));
          model->setRelation(authorIndex, QSqlRelation("author", "id", "name"));
      /* andere statements*/
      QSqlTableModel *authorRelModel = model->relationModel(authorIndex);
          authorComboBox->setModel(authorRelModel);
          authorComboBox->setModelColumn(authorRelModel->fieldIndex("name"));
          QSqlTableModel *receiverRelModel = model->relationModel(receiverIndex);
          receiverComboBox->setModel(receiverRelModel);
          receiverComboBox->setModelColumn(receiverRelModel->fieldIndex("name"));
      /* andere statements */
      mapper->setItemDelegate(new QSqlRelationalDelegate(this));
          mapper->addMapping(titleLineEdit, model->fieldIndex("title"));
          mapper->addMapping(authorComboBox, authorIndex);
          mapper->addMapping(receiverComboBox, receiverIndex);
      

      Das funktioniert auch richtig gut: Die werden in der QComboBox mit den richtigen Werten angezeigt und die Modelle (die SQL-Tabelle) enthalten nach dem Submit die richtigen Daten.

      Ich benötige von der ComboBox für eine Abfrage von weiteren Feldern den Wert receiver_id, bekomme aber lediglich den angezeigten Namen. (QVariant(QString, "Müller"))

      receiverComboBox->currentData(Qt::EditRole);

      Gibt es irgendeine Möglichkeit diesen Wert von der Combobox zu bekommen? Wahrscheinlich übersehe ich irgendetwas.

      Wäre toll, wenn jemand die Lösung kennt.

      W Offline
      W Offline
      wolfgang.hammes
      wrote on last edited by
      #2

      Ich habe es tatsächlich herausbekommen. Im Signal

      QComboBox::currentIndexChanged
      

      wird der Index des ausgewählten Eintrags übergeben. Und über

      QSqlTableModel *receiverRelModel = model->relationModel(receiverIndex);
       QSqlRecord record = receiverRelModel->record(index);
      

      konnte ich dann auf den richtigen Record der Tabelle und damit die Felder zugreifen.

      Es war mir nicht klar, dass das über den Index so einfach gesteuert werden kann.

      1 Reply Last reply
      0
      • W wolfgang.hammes has marked this topic as solved on

      • Login

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