为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM7
【操作系统】:银河麒麟v10 sp1
【CPU】:D2000
【问题描述】*:QT 4.8.6 代码中使用QDM和使用GDAL时,应用程序会崩溃。取消使用gdal库函数或不使用QDM数据库连接则正常。
aarch64
下面的是一个简单的QWidget界面例子:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
//QODBC
void on_btn_odbc_clicked();
//QMD方式
void on_btn_dm_clicked();
//测试是否可以连接SQLite
void on_pushButton_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QMessageBox>
#include <QSqlError>
#include <gdal_priv.h>
#include <ogr_api.h>
#include <ogr_srs_api.h>
#include <ogr_feature.h>
#include <ogr_geometry.h>
#include <cpl_conv.h> // For CPLMalloc()
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//测试的gdal函数
GDALAllRegister();
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_btn_odbc_clicked()
{
QSqlDatabase m_db = QSqlDatabase::addDatabase("QODBC");
m_db.setHostName("172.16.60.103");
m_db.setDatabaseName("DM7");
m_db.setUserName("BOW");
m_db.setPassword("123456789");
m_db.setPort(5236);
bool isOpen = m_db.open();
if(!isOpen)
{
QMessageBox::warning(nullptr,"Open DM7 Error",m_db.lastError().text());
}
m_db.close();
}
void Widget::on_btn_dm_clicked()
{
QSqlDatabase m_db = QSqlDatabase::addDatabase("QDM");
m_db.setHostName("172.16.60.103");
m_db.setDatabaseName("BOW");
m_db.setUserName("BOW");
m_db.setPassword("123456789");
m_db.setPort(5236);
bool isOpen = m_db.open();
if(!isOpen)
{
QMessageBox::warning(nullptr,"Open DM7 Error",m_db.lastError().text());
}
m_db.close();
}
void Widget::on_pushButton_clicked()
{
QSqlDatabase m_db;
if(QSqlDatabase::contains("qt_sql_default_connection"))
{
m_db = QSqlDatabase::database("qt_sql_default_connection");
}
else {
m_db = QSqlDatabase::addDatabase("QSQLITE");
}
m_db.setDatabaseName("Test.db") ;
bool isOpen = m_db.open();
if(!isOpen)
{
QMessageBox::warning(nullptr,"Open DM7 Error",m_db.lastError().text());
}
m_db.close();
}
上列代码中,程序运行,连接QODBC或QDM,会引起程序崩溃闪退。连接SQLite则正常。
请发下core堆栈图
您好 请参考一下文档 https://eco.dameng.com/document/dm/zh-cn/app-dev/c_c++_qdm.html
调试一下 还有问题的话 请尽可能的提供数据库版本号 驱动版本号 报错信息等便于快速重现定位问题