2

QMLWebView要素で視覚的なnewWindowComponentの代わりにQt::openUrlExternallyを使用する方法は?

4

2 に答える 2

3

QML を使用してこれを行う簡単な方法はないと思います。標準QWebViewでこれを行うことができますが、QML 内からこの機能にアクセスする方法はありません。より多くの機能を再ラップQWebViewして公開する必要があります。

標準 C++ インターフェイスを使用した例:

test.cpp

#include <QtGui>
#include <QtWebKit>
#include "handler.hpp"

int main(int argc, char** argv)
{
    QApplication app(argc, argv);

    QWebView view;
    view.load(QUrl::fromUserInput("http://qt-project.org/"));

    view.page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);

    LinkHandler handler;

    QObject::connect(
        &view, SIGNAL(linkClicked(const QUrl&)),
        &handler, SLOT(open(const QUrl&)));

    view.show();

    return app.exec();
}

ハンドラー.hpp

#ifndef _HANDLER_HPP_
#define _HANDLER_HPP_

#include <QtGui>

class LinkHandler : public QObject
{
    Q_OBJECT
    public:
        LinkHandler();

    public slots:
        void open(const QUrl& url);
};

#endif

ハンドラ.cpp

#include "handler.hpp"

LinkHandler::LinkHandler() : QObject() {}

void LinkHandler::open(const QUrl& url)
{
    QDesktopServices::openUrl(url);
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

find_package(Qt4 4.8 REQUIRED QtCore QtGui QtWebkit)
include(${QT_USE_FILE})

qt4_wrap_cpp(MOC_FILES handler.hpp)
add_executable(test
    test.cpp
    handler.hpp
    handler.cpp
    ${MOC_FILES})
target_link_libraries(test ${QT_LIBRARIES})
于 2012-04-30T19:37:23.300 に答える