我对QT还是很陌生,我需要创建QML组件来查看网页,并且可以跟踪某些链接上的点击。我创建了从QWebView继承的MyWebView类
mywebview.h
#ifndef MYWEBVIEW_H
#define MYWEBVIEW_H
#include <QApplication>
#include <QWebFrame>
#include <QWebPage>
#include <QWebView>
#include <QUrl>
#include <QJsonDocument>
#include <QJsonObject>
#include <QObject>
#include <QProcess>
class MyWebView: public QWebView {
Q_OBJECT
public:
explicit MyWebView();
public slots:
void onJavaScriptWindowObjectCleared();
void trackOpen(QString metadata);
void trackTurn(QString metadata);
mywebview.cpp
#include "mywebview.h"
MyWebView::MyWebView(){
connect(this->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),
this, SLOT(onJavaScriptWindowObjectCleared()));
qInfo() << "MyWebView Created";
}
void MyWebView::onJavaScriptWindowObjectCleared(){
this->page()->mainFrame()->evaluateJavaScript("console.log('MyWebView init!')");
}
void MyWebView::trackOpen(QString metadata){
qWarning() << "Open";
}
void MyWebView::trackTurn(QString metadata) {
qWarning() << "Turn";
}
使用此组件的主程序: main.cpp
#include "mywebview.h"
#include <QtQuick/QQuickView>
#include <QApplication>
#include <QtQuick/QQuickItem>
#include <QQmlApplicationEngine>
#include <QtWebView/QtWebView>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
qmlRegisterType<MyWebView>("MyWebView", 1, 0, "MyWebView");
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/app.qml")));
return app.exec();
}
app.qml
import MyWebView 1.0
import QtQuick 2.0
import QtWebKit 3.0
import QtQuick.Controls 1.4
import QtQuick.Window 2.0
ApplicationWindow {
id: window
visible: true
title: "Window"
width: 640
height: 480
MyWebView {
id: webview
url: "http://127.0.0.1"
}
}
因此,在运行该应用程序时,我只能看到干净的窗口,现在里面有内容。调查本地Web服务器的日志(127.0.0.1)我发现该程序向Web服务器发出请求。如何使我的组件可见? 预先感谢
答案 0 :(得分:0)
您的项目需要锚定到父项:
MyWebView {
id: webview
url: "http://127.0.0.1"
anchors.fill: parent
}