【问题标题】:Qt QList ASSERT failure after installing on others PCs在其他 PC 上安装后 Qt QList ASSERT 失败
【发布时间】:2014-02-11 03:15:11
【问题描述】:

我在 Visual Studio 2008 中制作了一些程序的安装包。所以在我的 PC 上安装后一切正常。在其他 PC 上,当您单击数据库连接选项时,它就会崩溃。

嗯,这是错误

我认为它出现在这一行

database = QSqlDatabase::addDatabase("QPSQL");

在数据库初始化部分,因为有关于 DB apperas 的消息,在这一行之前一切似乎都正常。

这里是完整的功能

void DatabaseManagement::initDatabase(){
    QMessageBox::information(this, "error tracking step 5", " DB ADDED");

    database = QSqlDatabase::addDatabase("QPSQL");
    
    QStringList sdrivers = QSqlDatabase::drivers();
    //output all avalible drivers
    QString driver = sdrivers[0];
    for(int i = 0; i< sdrivers.size();i++)
        QMessageBox::information(this, "Driver info", sdrivers[i]);

    
}

database 变量在这里是DatabaseManagement 类的全局变量。 同样在这个类中,我得到了getDatabase 函数,它返回database 变量,我在其他类中使用它,比如说mainClass(如果这可能是问题的原因)。

这个问题的原因可能是什么?我怎么能解决这个问题? 顺便说一句,我用Qt 4.7.4

统一更新: 好了,问题解决了!我忘记添加 sqldrivers 文件夹!当然我添加了所有必要的.dlls,但由于某种原因程序只能在这个文件夹中看到它。希望它对某人有帮助。 顺便说一句,DependencyWalker 表明没有工作版本没有任何问题(没有sqldrivers 文件夹)。

【问题讨论】:

  • Dependency Walker 没有看到我认为的运行时内容。 Process Explorer 就是为此提供的工具(在任务管理器无法解决的情况下也很有用)。

标签: c++ qt postgresql qt4 qlist


【解决方案1】:

我的猜测是问题出在此处(调试器会告诉您更多信息):

QStringList sdrivers = QSqlDatabase::drivers();
//output all available drivers
QString driver = sdrivers[0];

您在访问 sdrivers[0] 时未检查 sdrivers 是否包含至少一个元素。 我假设您没有正确部署 Qt SQL 插件,因此在另一台计算机上找不到任何插件。所以修复上面的代码(用if (!sdrivers.isEmpty())保护它)和deploy the plugins

【讨论】:

  • 是的插件部署问题,已经检查并完成!不过,谢谢
【解决方案2】:

问题更可能是这一行:QString driver = sdrivers[0]; 我猜你忘了提供 sql-plugin 文件夹? %YOUR-APP-PATH%/plugins/qpsql.dll

尝试添加:

if(sdrivers.size() > 0)
    QString driver = sdrivers[0];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    相关资源
    最近更新 更多