Как сделать пользовательский компонент QML видимым? - PullRequest
0 голосов
/ 27 ноября 2018

Я довольно новичок в QT, и мне нужно создать компонент QML для просмотра веб-страниц с возможностью отслеживания кликов по некоторым ссылкам.Я создал класс MyWebView, унаследованный от QWebView

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"
   }
}

Итак, при запуске этого приложения я вижу только чистое окно и теперь содержимое внутри него.Исследование журналов локального веб-сервера (127.0.0.1) Я обнаружил, что программа делает запросы к веб-серверу.Как сделать мой компонент видимым?Заранее спасибо

1 Ответ

0 голосов
/ 27 ноября 2018

Ваш элемент должен быть привязан к родителю:

MyWebView {
   id: webview
   url: "http://127.0.0.1"
   anchors.fill: parent
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...