当前位置: 代码迷 >> QT开发 >> Qt 下数据库文件和tableModel怎么链接起来的
  详细解决方案

Qt 下数据库文件和tableModel怎么链接起来的

热度:25   发布时间:2016-04-25 03:35:51.0
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