Qt QList在其他PC上安装后ASSERT失败

时间:2014-02-11 03:15:12

标签: c++ qt postgresql qt4 qlist

我在Visual Studio 2008中创建了一些程序包。所以安装后我的电脑上运行良好。在其他PC上,当您只需单击数据库连接选项时,它就会崩溃。

嗯,这是错误

enter image description here

我认为它出现在这一行

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

在数据库初始化部分,因为有关DB上传的消息,所有内容在此行之前似乎都能正常工作。

这是完整的功能

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(如果这可能是问题的原因)。< / p>

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

UPD: 好吧,问题解决了!我忘了添加sqldrivers文件夹!当然我添加了所有必要的.dlls但由于某种原因,程序只在此文件夹中看到它。希望它对某些人有用。 顺便说一句 DependencyWalker 显示没有工作版本没有错误(没有sqldrivers文件夹)。

2 个答案:

答案 0 :(得分:4)

我的猜测是问题出在这里(调试器会告诉你更多):

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

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

答案 1 :(得分:1)

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

尝试添加:

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