Qt 4 Sqlite,QDataWidgetMapper的问题

时间:2011-02-17 14:16:10

标签: c++ sqlite qt4

我正在写一个小的Symbian应用程序,我遇到了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();


}

在我用一些测试行填充数据库之前,我确定它有效,因为

  

databaseManager-> showDebugMsg(项目);

告诉我正确的数据。但是映射失败了。 getTableModel非常简单:

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

这里是DatabaseManager构造函数:

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

}

由于insertTestExspense有效,我认为问题可能出在setTable()......但我看不出我错过了什么......

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

你可以采取一些措施使其发挥作用:

1.检查fieldIndex("item")是否实际返回有效的字段索引。

2.对于QLabel映射,还为datamanager的addMapping调用指定text属性名称:

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

希望这有帮助,尊重