用Qt在安卓中开发,用到了web网页,这里面,但是安卓没有QWebEngine,等一些库(Qt版本:Qt5.15.2),但是有QtWebView,但是这个只能在qml中使用。所以需要qml和c++混合开发
Qt 安卓环境搭建问题可以参考请移步 《Qt android 开发环境搭建》
Qt C++和qml混合开发,主要用到了C++和qml之前的通信,之间的数据传递。
在安卓下,可以打开网页,进行跳转。
主要在安卓下实现一个简易的浏览器功能
main.qml
import QtQuick 2.15
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtWebView 1.1
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.2
Item {
visible: true
// title: qsTr("Hello World")
Rectangle {
Text {
text: webView.url
}
}
Connections {
target: widget
onSigGo: {
console.log("url: " + url);
webView.url = url
widget.setText(webView.url)
}
onSigReflash: {
webView.reload()
widget.setText(webView.url)
console.log("url: " + webView.url)
}
onSigForward: {
webView.goForward()
widget.setText(webView.url)
console.log("url: " + webView.url)
}
onSigBack: {
webView.goBack()
widget.setText(webView.url)
console.log("url: " + webView.url)
}
}
WebView {
id: webView
anchors.fill: parent
onLoadingChanged: {
widget.setText(webView.url)
console.log("url changed: " + webView.url)
if (loadRequest.errorString)
console.error(loadRequest.errorString)
}
}
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include
#include
#include
#include
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
m_pWebView = new QQuickWidget(QUrl("qrc:/main.qml"));
m_pWebView->setResizeMode(QQuickWidget::SizeRootObjectToView);
m_pWebView->rootContext()->setContextProperty("widget", this);
QVBoxLayout *layout = new QVBoxLayout(ui->wgtWeb);
layout->addWidget(m_pWebView);
QTimer::singleShot(2000, this, [this](){
emit sigGo(QUrl::fromUserInput(ui->lineEdit->text()));
});
}
Widget::~Widget()
{
delete ui;
}
void Widget::setText(QString url)
{
ui->lineEdit->setText(url);
}
void Widget::on_btnBack_clicked()
{
emit sigBack();
}
void Widget::on_btnRefresh_clicked()
{
emit sigReflash();
}
void Widget::on_btnForward_clicked()
{
emit sigForward();
}
void Widget::on_btnGo_clicked()
{
emit sigGo(QUrl::fromUserInput(ui->lineEdit->text()));
}
main.cpp
#include
#include
#include
#include
#include
#include
#include
#include "Widget.h"
int main(int argc, char *argv[])
{
QtWebView::initialize();
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
代码下载地址:
链接: https://pan.baidu.com/s/1YcG52wZweMKGwKQVzqHzLQ 提取码: hwfk
Qt Quick 之 QML 与 C++ 混合编程详解