我正在写一个小的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()......但我看不出我错过了什么......
有什么想法吗?
答案 0 :(得分:3)
你可以采取一些措施使其发挥作用:
1.检查fieldIndex("item")
是否实际返回有效的字段索引。
2.对于QLabel映射,还为datamanager的addMapping调用指定text属性名称:
dataMapper->addMapping(ui->debugLabel, databaseManager->getTableModel()>fieldIndex("item"), "text");
希望这有帮助,尊重