2011-02-17 2 views
1

J'écris une petite application Symbian et j'ai des problèmes avec QDataWidgetMapper. Voici le code:Qt 4 Sqlite, problème avec QDataWidgetMapper

void Widget::bindToData(){ 
    databaseManager = new DatabaseManager(); 
    dataMapper = new QDataWidgetMapper(); 
    dataMapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit); 
    dataMapper->setModel(databaseManager->getTableModel()); 
    dataMapper->addMapping(ui->debugLabel, databaseManager->getTableModel()->fieldIndex("item")); //ko 
    QSqlQuery q; 
    bool ret = q.exec("SELECT * FROM expense"); 

    if (!ret){ 
     databaseManager->showDebugMsg(q.lastError().text()); 
    } 
    while (q.next()) { 
     QString item = q.value(1).toString(); 
     databaseManager->showDebugMsg(item); //ok 
    } 

    dataMapper->toFirst(); 


} 

Avant d'avoir remplir la base de données avec une ligne de test et je suis sûr que cela a fonctionné parce

databaseManager-> showDebugMsg (point);

Montrez-moi les bonnes données. Mais le mappage échoue. Le getTableModel est assez simple:

QSqlTableModel * DatabaseManager::getTableModel(){ 
    tableModel->select(); 
    return tableModel; 
} 

et ici il est le constructeur DatabaseManager:

DatabaseManager::DatabaseManager(){ 
    debugMsgBox = new QMessageBox(); 
    this->deleteDB(); 
    this->openDB(); 
    this->createExpenseTable(); 
    this->insertTestExpense("test", 11.0); 
    tableModel = new QSqlTableModel(); 
    tableModel->setTable("expense"); 

} 

Depuis le insertTestExspense fonctionne, je pense que le problème peut être dans le setTable() ... mais je ne peux ne vois pas ce qui me manque ...

Une idée?

Répondre

3

Couple de choses que vous pouvez faire pour le faire fonctionner:

1.Vérifier si fieldIndex("item") retourne en fait un index de champ valide.

2.Pour la mise en correspondance QLabel également spécifier text nom de propriété pour l'appel addMapping du gestionnaire de données:

dataMapper->addMapping(ui->debugLabel, databaseManager->getTableModel()>fieldIndex("item"), "text"); 

espérons que cette aide, ce qui est

+0

Il a travaillé. Mais pourquoi ai-je besoin de spécifier le paramètre "texte"? La documentation est un peu énigmatique ici http://doc.qt.nokia.com/latest/qdatawidgetmapper.html#addMapping-2 il dit "ajoute la possibilité de spécifier la propriété à utiliser" ... mais la propriété de quel objet? – Segolas

+0

addMapping permet de spécifier le mappage entre un widget et votre section de modèle. PropertyName paramètre permet de définir une propriété d'un widget qui devrait être utilisé pour le mappage –

+0

ok, merci encore. – Segolas