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
Forum Updated to NodeBB v4.3 + New Features

QSqlRelationalModel and QCombobox

Scheduled Pinned Locked Moved Solved German
2 Posts 1 Posters 429 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