Seite 1 von 1

QSqlTableModel Zeilen und Zellen auslesen

Verfasst: 11. Juni 2010 05:01
von binnio
Hallo ich möchte zwei tableView Tabellen mit Leben füllen.

Meine zwei Datenbanken sind sehr einfach gehalten:
model->setHeaderData(0, Qt::Horizontal, tr("ID"));
model->setHeaderData(1, Qt::Horizontal, tr("Vorname"));
model->setHeaderData(2, Qt::Horizontal, tr("Nachname"));
model->setHeaderData(3, Qt::Horizontal, tr("Geburtsdatum"));
model->setHeaderData(4, Qt::Horizontal, tr("Telefon"));
model->setHeaderData(5, Qt::Horizontal, tr("Handy"));
model->setHeaderData(6, Qt::Horizontal, tr("Fax"));
model->setHeaderData(7, Qt::Horizontal, tr("E-Mail"));
und
void hauptprogramm::on_action_connect_triggered()
{
if(mSQLManager.connect()){
ui->statusBar->showMessage((QString("Datenbank-Driver:").append(mSQLManager.get_mDb().driverName().append("\nVerbingung erfolgreich aufgebaut"))));
}else{
ui->statusBar->showMessage(mSQLManager.get_mDb().lastError().driverText());
}


QSqlTableModel *model = new QSqlTableModel(ui->tableView_person);
model->setTable("person");
model->setEditStrategy(QSqlTableModel::OnFieldChange);

model->setSort(1, Qt::AscendingOrder);

model->setHeaderData(0, Qt::Horizontal, tr("ID"));
model->setHeaderData(1, Qt::Horizontal, tr("Vorname"));
model->setHeaderData(2, Qt::Horizontal, tr("Nachname"));
model->setHeaderData(3, Qt::Horizontal, tr("Geburtsdatum"));
model->setHeaderData(4, Qt::Horizontal, tr("Telefon"));
model->setHeaderData(5, Qt::Horizontal, tr("Handy"));
model->setHeaderData(6, Qt::Horizontal, tr("Fax"));
model->setHeaderData(7, Qt::Horizontal, tr("E-Mail"));

model->select();

ui->tableView_person->setModel(model);
ui->tableView_person->setSortingEnabled(true);
ui->tableView_person->setAlternatingRowColors(true);

}

void hauptprogramm::on_tableView_person_clicked(QModelIndex index){

QSqlTableModel *model = new QSqlTableModel(ui->tableView_adresse);
QSqlTableModel *model2 = new QSqlTableModel(ui->tableView_person);
model->setTable("adresse");
model->setEditStrategy(QSqlTableModel::OnFieldChange);

model->setSort(1, Qt::AscendingOrder);

model->setFilter("pfl_id=1");//hier soll mal die ID von der angeklickten ZEILE stehen

model->setHeaderData(0, Qt::Horizontal, tr("ID"));
model->setHeaderData(1, Qt::Horizontal, tr("Staße"));
model->setHeaderData(2, Qt::Horizontal, tr("Haus-Nr."));
model->setHeaderData(3, Qt::Horizontal, tr("PLZ"));
model->setHeaderData(4, Qt::Horizontal, tr("Ort"));
model->setHeaderData(5, Qt::Horizontal, tr("Land"));
model->setHeaderData(6, Qt::Horizontal, tr("Postfach"));
model->select();


ui->tableView_adresse->setModel(model);
ui->tableView_adresse->setSortingEnabled(true);
ui->tableView_adresse->setAlternatingRowColors(true);

}
model->setHeaderData(0, Qt::Horizontal, tr("ID"));
model->setHeaderData(1, Qt::Horizontal, tr("Staße"));
model->setHeaderData(2, Qt::Horizontal, tr("Haus-Nr."));
model->setHeaderData(3, Qt::Horizontal, tr("PLZ"));
model->setHeaderData(4, Qt::Horizontal, tr("Ort"));
model->setHeaderData(5, Qt::Horizontal, tr("Land"));
model->setHeaderData(6, Qt::Horizontal, tr("Postfach"));
Jetzt möchte ich es hinbekommen das wenn ich in der ersten Tabelle eine Zelle anklicke, die ID der ZEILE genommen wird und damit die zweite Tabelle mit Leben gefüllt wird. Es ist im grunde sehr einfach was ich vor habe aber ich komme einfach nicht auf die erste ZELLE einer ZEILE :(

Das Bild hilft denke ich sehr was mein Problem angeht.

mein bisheriger Quellcode:

Verfasst: 11. Juni 2010 06:49
von binnio
Ok habe die Lösung :) EIgentlich total einfach wenn man nicht ein leeres Model anspricht :)

Code: Alles auswählen

void hauptprogramm::on_action_connect_triggered()
{
    if(mSQLManager.connect()){
        ui->statusBar->showMessage((QString("Datenbank-Driver:").append(mSQLManager.get_mDb().driverName().append("\nVerbingung erfolgreich aufgebaut"))));
    }else{
        ui->statusBar->showMessage(mSQLManager.get_mDb().lastError().driverText());
    }

    //QSqlQueryModel *model = new QSqlQueryModel(ui->tableView_person);
    //model->setQuery("SELECT * from person");

    mPerson_model = new QSqlTableModel(ui->tableView_person);
    mPerson_model->setTable("person");
    mPerson_model->setEditStrategy(QSqlTableModel::OnFieldChange);
    mPerson_model->setSort(1, Qt::AscendingOrder);

    mPerson_model->setHeaderData(0, Qt::Horizontal, tr("ID"));
    mPerson_model->setHeaderData(1, Qt::Horizontal, tr("Vorname"));
    mPerson_model->setHeaderData(2, Qt::Horizontal, tr("Nachname"));
    mPerson_model->setHeaderData(3, Qt::Horizontal, tr("Geburtsdatum"));
    mPerson_model->setHeaderData(4, Qt::Horizontal, tr("Telefon"));
    mPerson_model->setHeaderData(5, Qt::Horizontal, tr("Handy"));
    mPerson_model->setHeaderData(6, Qt::Horizontal, tr("Fax"));
    mPerson_model->setHeaderData(7, Qt::Horizontal, tr("E-Mail"));

    mPerson_model->select();
    //model->setQuery("SELECT * FROM person");


    ui->tableView_person->setModel(mPerson_model);
    ui->tableView_person->setSortingEnabled(true);
    ui->tableView_person->setAlternatingRowColors(true);
    //ui->tableView_person->setEditTriggers(QAbstractItemView::NoEditTriggers);


}

void hauptprogramm::on_pushButton_clicked(){
    close();
}

void hauptprogramm::on_tableView_person_clicked(QModelIndex index){

    mAdresse_model = new QSqlTableModel(ui->tableView_adresse);
    mAdresse_model->setTable("adresse");
    mAdresse_model->setEditStrategy(QSqlTableModel::OnFieldChange);
    mAdresse_model->setSort(1, Qt::AscendingOrder);

    mAdresse_model->setFilter(QString("pfl_id=%1").arg(index.sibling(index.row(),0).data().toString())); //hier soll mal die ID von der angeklickten ZEILE stehen

    mAdresse_model->setHeaderData(0, Qt::Horizontal, tr("ID"));
    mAdresse_model->setHeaderData(1, Qt::Horizontal, tr("Staße"));
    mAdresse_model->setHeaderData(2, Qt::Horizontal, tr("Haus-Nr."));
    mAdresse_model->setHeaderData(3, Qt::Horizontal, tr("PLZ"));
    mAdresse_model->setHeaderData(4, Qt::Horizontal, tr("Ort"));
    mAdresse_model->setHeaderData(5, Qt::Horizontal, tr("Land"));
    mAdresse_model->setHeaderData(6, Qt::Horizontal, tr("Postfach"));
    mAdresse_model->select();


    ui->tableView_adresse->setModel(mAdresse_model);
    ui->tableView_adresse->setSortingEnabled(true);
    ui->tableView_adresse->setAlternatingRowColors(true);

}