ich bin gerade dabei ein kleines Programm zu schreiben welches diverse tableViews und QSqlTableModels verwendet.
Leider bekomme ich es nicht hin eine neue Zeile hinzuzufügen.
Ich hab das Problem in einem simplen Dialog nachgebaut (siehe Anhang)
Zum reproduzieren:
1. "New entry" klicken
2. Eingaben machen
3. Zu Tabelle 2 wechseln
4. Wieder zu Tabelle 1 wechseln
-> Zeile verschwunden
Hier der relevante Code:
Code: Alles auswählen
#include <QtSql>
#include <QHeaderView>
#include <QModelIndex>
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent), ui(new Ui::DialogClass)
{
ui->setupUi(this);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
if (!db.open())
qDebug("could not open db");
QSqlQuery query;
query.exec("CREATE TABLE table1 (id INTEGER PRIMARY KEY, text CHAR)");
query.exec("CREATE TABLE table2 (id INTEGER PRIMARY KEY, text CHAR)");
query.exec("INSERT INTO table1 values(1, 'Hello world in table 1!')");
query.exec("INSERT INTO table2 values(1, 'Hello world in table 2!')");
model = new QSqlTableModel(this);
model->setTable("table1");
model->select();
ui->tableView->setModel(model);
ui->tableView->horizontalHeader()->setStretchLastSection(true);
}
Dialog::~Dialog()
{
delete model;
delete ui;
}
void Dialog::on_table1Button_toggled(bool toggle)
{
ui->table2Button->setChecked(!toggle);
model->setTable("table1");
model->select();
}
void Dialog::on_table2Button_toggled(bool toggle)
{
ui->table1Button->setChecked(!toggle);
model->setTable("table2");
model->select();
}
void Dialog::on_addEntryButton_clicked()
{
int row = model->rowCount();
model->insertRow(row);
QModelIndex index = model->index(row, 0);
ui->tableView->edit(index);
}