2017-06-19 1 views
-1

Ich kann nichts finden, was dies verursachen könnte. Ich habe Buttons und TableViews in meinem UI-Formular definiert.Qt - Warum verliert QTableView sein Modell()?

Dann mache ich:

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    if (!createConnection(this)) 
     printf("%s\n", "Unable to set up database!"); 

    QSqlTableModel* model = new QSqlTableModel(this); 
    model->setTable(tableName); 
    model->setEditStrategy(QSqlTableModel::OnManualSubmit); 
    model->select(); 

    table->setModel(model); 
    // At this point both model and table->model return same thing (proper model). 
} 

Aber dann habe ich:

void MainWindow::on_save_clicked() 
{ 
    QTableView* current = (QTableView*) ui->tables->currentWidget(); 
    // current table is correctly found. 
    QSqlTableModel* model = (QSqlTableModel*) current->model(); 
    // model is null 
} 

Irgendwelche Hinweise?

+1

Vielleicht 'UI-> Tabellen-> Current()' ist nicht das gleiche wie 'table'. – drescherjm

+0

@drescherjm Verdammt, objectName() hat mich verwirrt (sie waren gleich). Du hast recht, einer ist ein Container, ein anderer ist ein Tisch (in diesem Container). – Ernio

Antwort

0

Wie @drescherjm hingewiesen.

Meine Tabs waren tatsächlich Behälter für Tische in ihnen und Currentzurück sie, nicht die Tabellen selbst. Dies kann entweder durch direktes Einfügen von Tabellen in Tabs oder durch Erstellen einer Wrapping-Klasse mit einem Zeiger auf benötigte Daten behoben werden.