如何使自定义QML组件可见?

时间:2018-11-27 16:27:03

标签: c++ qt qml

我对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服务器发出请求。如何使我的组件可见? 预先感谢

1 个答案:

答案 0 :(得分:0)

您的项目需要锚定到父项:

MyWebView {
   id: webview
   url: "http://127.0.0.1"
   anchors.fill: parent
}