qt数据库 qsqlquerymodel中setheaderdata怎么设置中文

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt数据库 qsqlquerymodel中setheaderdata怎么设置中文相关的知识,希望对你有一定的参考价值。

参考技术A Qt数据库 QSqlQueryModel实例操作 上篇是本文要介绍内容中一节,分为上下篇。在上一篇的最后我们说到,Qt中使用了自己的机制来避免使用SQL语句,它为我们提供了更简单的数据库操作和数据显示模型。它们分别是只读的QSqlQueryModel,操作单表的QSqlTableModel和以及可以支持外键的QSqlRelationalTableModel。这次我们先讲解QSqlQueryModel。
QSqlQueryModel类为SQL的结果集提供了一个只读的数据模型,下面我们先利用这个类进行一个最简单的操作。
我们新建Qt4 Gui Application工程,我这里工程名为queryModel ,然后选中QtSql模块,Base class选本回答被提问者采纳

TableView 不会将 QSqlQueryModel 加载到其中

【中文标题】TableView 不会将 QSqlQueryModel 加载到其中【英文标题】:TableView does not load the QSqlQueryModel into it 【发布时间】:2019-04-22 18:40:28 【问题描述】:

我正在使用 tableView 通过 QSqlQueryModel 从我的数据库中的表中显示一些信息。它连接它创建实际的表,它创建行和列并相应地标记它们,当我在qDebugg() 中使用model->rowCount(); 时,它会向我显示正确的行数,对于列也是如此。

问题是我应该显示信息的每一行上的列是......好吧......空,空白,当我在表中有实际数据并且我无法弄清楚为什么并且没有找到关于视频、在线或堆栈溢出的特定解决方案(只有 1 个问题接近此问题,但它说使用 rowCount() 调试连接并安装缺少的驱动程序......)

这是我迄今为止尝试过的:

QString error=nullptr;
    QSqlDatabase db=this->mDbConnection->getDataBase();
    if(!this->mDbConnection->openDatabase(&error)) 
       QMessageBox::critical(this, "Error: ", error);
       return;
     else 
        qDebug()<<"Connection to database sucess!";
        db.open();
        QSqlQueryModel *model = new QSqlQueryModel();
       model->setQuery("SELECT [UserID],[FullName],[UserName],[Password],[PermissionID]FROM [Restaurant].[dbo].[Users]");
       ui->tableView->setModel(model);
       qDebug()<<model->rowCount();
       //qDebug()<<data(model->createIndex(0,0));
        db.close();
        //cod aici
    

//mDbConnection is a custom object databaseconnection.cpp:
bool DatabaseConnection::openDatabase(QString *error) 
    this->db.setDatabaseName(QString("DRIVER=%1;SERVER=%2;DATABASE=%3;UID=%4;PWD=%5;Trusted_Connection=%6;").arg(this->conn->getDriver())
        .arg(this->conn->getServer())
        .arg(this->conn->getDatabaseName())
        .arg(this->conn->getUser())
        .arg(this->conn->getPassword())
        .arg(this->conn->getTrustedConnection() ? "Yes" : "No"));

        if(!this->db.open()) 
            if (error!=nullptr) 
                *error = this->db.lastError().text();
            
            return false;
        
        return true;


QSqlDatabase DatabaseConnection::getDataBase() 
    return this->db;

结果是我的数据库中的表格,其标签正确且行数充足,但所有内容均为空

【问题讨论】:

【参考方案1】:

QSqlDataBase 对象 db 需要在用户界面的析构函数中关闭,否则即使将它加载到内存中它也不会显示,并且可能表现得很奇怪..... 所以你应该在接口构造函数中使用 db.open() 和 db.close();在析构函数中。

不要将它们都放在这样的函数中:

void function()

db.open()
// code for database here
db.close();

它不会这样工作,我还不明白为什么

【讨论】:

以上是关于qt数据库 qsqlquerymodel中setheaderdata怎么设置中文的主要内容,如果未能解决你的问题,请参考以下文章

QT中QTableview表中内容修改?

QT中QTableview表中内容修改?

qt 怎样将sqlite3数据显示到列表框中,急求

带有父级的 QSqlQueryModel - 应用程序崩溃

QSqlQueryModel 配合Qtableview的表格,怎么实现点击头部排序

QT使用SQLite