注册

QDM+GDAL会引起程序崩溃

Zero 2024/12/21 359 7

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【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则正常。

回答 0
暂无回答
扫一扫
联系客服