项目里有使用地图导航的要求,但是qt for Android不支持webengine,为此着实焦头烂额了一阵,感谢大佬的分享,成功在Android环境下打开地图,连接如下:https://blog.youkuaiyun.com/qq_44667165/article/details/124425313?fromshare=blogdetail&sharetype=blogdetail&sharerId=124425313&sharerefer=PC&sharesource=2301_76263212&sharefrom=from_link但是,该教程是打开app直接开启地图,由于个人需要,在此将其改为qt widgets application模板下的按键触发。
首先按照链接的教程,自行编写出程序,后面会用到。
然后新建一个项目:构建系统qmake,detail用的widget,语言无,套件选x86_64和arm64_v8a。
新建完成后,将教程项目中的android文件夹和qml文件复制到新的项目文件中。
复制:
粘贴:
在qt左栏中添加qml和html文件:
在widget.cpp中添加头文件,和按键触发函数。
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQuickView>
#include <QQuickItem>
#include <QQuickWidget>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_mapButton_clicked()
{
// 创建QQuickWidget来加载QML
QQuickWidget* quickWidget = new QQuickWidget(this);
const QUrl url(u"qrc:/course/main.qml"_qs);
quickWidget->setSource(url);
if (quickWidget->status() == QQuickWidget::Error) {
qDebug() << "QML file load failed.";
} else {
// 设置QQuickWidget的大小为屏幕的上9/10
int screenHeight = QGuiApplication::primaryScreen()->geometry().height();
int newHeight = screenHeight * 9 / 10;
quickWidget->setGeometry(0, 0, this->width(), newHeight);
}
}
pro文件:
1.添加模块:
QT += core gui network widgets quick quickwidgets
2.添加资源:
将SOURCES += \
main.cpp \
widget.cpp改为
SOURCES += \
main.cpp \
widget.cpp
resources.files = main.qml
resources.prefix = /$${TARGET}
RESOURCES += resources
3.添加编译环境:
contains(ANDROID_TARGET_ARCH,x86_64) {
ANDROID_PACKAGE_SOURCE_DIR = \
$$PWD/android
}
contains(ANDROID_TARGET_ARCH,arm64-v8a) {
ANDROID_PACKAGE_SOURCE_DIR = \
$$PWD/android
}
此处添加的编译环境是x86_64和arm64_v8a,如果有别的需求,亦需添加,否则将找不到html的路径,出现打不开网页的情况。