QtPositioning QGeoPositionInfoSource::createSource 对于 NMEA 设备返回 nullptr

问题描述 投票:0回答:1

我正在尝试遵循 NMEA 指南,但遇到了一些麻烦(Qt 6.7.0、MSVC 2022、Windows 11):https://doc.qt.io/qt-6/position-plugin- nmea.html

我安装了 Qt 定位模块,并且可以创建默认的 GeoPositionInfoSource,但不能创建 NMEA 源。当从示例中调用 createSource 函数时,我得到了一个空指针。我已经举了一个例子。

CMakeLists.txt:

cmake_minimum_required(VERSION 3.14)

project(qt-nmea-test LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Positioning)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Positioning)

add_executable(qt-nmea-test
  main.cpp
)
target_link_libraries(qt-nmea-test Qt${QT_VERSION_MAJOR}::Core
                                   Qt${QT_VERSION_MAJOR}::Positioning)

include(GNUInstallDirs)
install(TARGETS qt-nmea-test
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

main.cpp:

#include <QGeoPositionInfoSource>
#include <QVariantMap>

int main(int argc, char *argv[])
{
    qDebug() << "Available sources: " << QGeoPositionInfoSource::availableSources();

    QGeoPositionInfoSource *defaultSource = QGeoPositionInfoSource::createDefaultSource(nullptr);
    if (defaultSource != nullptr)
        qDebug() << "Default source is good!";
    else
        qDebug() << "Default source is null";

    QVariantMap params;
    params["nmea.source"] = "socket://localhost:22222";
    QGeoPositionInfoSource *nmeaSource = QGeoPositionInfoSource::createSource("nmea", params, nullptr);
    if (nmeaSource != nullptr)
        qDebug() << "NMEA source is good!";
    else
        qDebug() << "NMEA source is null";
}

我得到以下输出:

Available sources:  QList("nmea", "winrt")
Default source is good!
NMEA source is null

我已追踪到https://github.com/qt/qtpositioning/blob/v6.7.0/src/positioning/qgeopositioninfosource.cpp#L83。它正在尝试加载工厂类,但此行返回的工厂实例为空。

我在 Qt 6.6.2 上使用 MSVC 2022 和 GCC 11 (Ubuntu 22.04) 得到了类似的结果。

我是否缺少一些初始化步骤?我是否错误地使用了插件?

c++ qt gps qtpositioning
1个回答
0
投票

NMEA 插件还需要 Qt 串口插件。安装后,相同的代码片段可以按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.