Qt 下数据库文件和tableModel如何链接起来的
代码:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); // 建立数据库驱动
db.setDatabaseName("db"); // 打开数据库文件 db
if(!db.open()) // 如果打开失败,提示消息对话框
{
QMessageBox::critical(0, tr("Cannot open database"),
tr("Unable to establish a database connection.\n"
"This example needs SQLite support. Please read "
"the Qt SQL driver documentation for information how "
"to build it."), QMessageBox::Cancel);
return;
}
db.close(); // 关闭数据库
QSqlTableModel *model; // 建立一个TableModel类
model = new QSqlTableModel();
QStringList list = model->database().tables(); // 得到db数据库文件中"表"
qDebug() << list.size(); // 显示所存在的"表"的个数
for (int i = 0; i < list.size(); ++i) // 敬爱那个所有的"表"名称显示出来
qDebug() << list.at(i).toLocal8Bit().constData() << endl;
model->setTable("person"); // 选定一个"表"
model->select(); //
问题:
我关闭了数据库文件(db.close())后,才新建了QSqlTableModel类,为什么通过
model->database().tables()可以取得该数据库文件中所有的"表"名?QSqlTableModel类是如何和数据库文件链接起来的? //
[解决办法]
这是因为QSqlTableModel构造中有个默认参数QSqlDatabase(),这个是全局默认的缺省数据库,就算你关闭了,会自动open()的。
[解决办法]
http://blog.csdn.net/rabinsong/article/details/8452946, 看看这篇文章,重载data,将QTreeView,改为QTableView