2
A
回答
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();
}
handler.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
handler.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})
0
下面的代碼將打開在新窗口中的所有環節,但它是微不足道的增加檢測target=_blank
WebView{
id: webView
url: "samples/sample.html"
preferredWidth: parent.width
enabled: false
onLoadFinished: {
evaluateJavaScript(' \
var els = document.getElementsByTagName("a"); \
for (var i in els){ \
els[i].onclick = function(e){e.preventDefault(); qml.qmlCall(this.getAttribute("href")); return false;} \
} \
')
enabled = true;
}
javaScriptWindowObjects: QtObject {
WebView.windowObjectName: "qml"
function qmlCall(url) {
console.log(url);
Qt.openUrlExternally(url)
}
}
}
它歸結爲在webview中加載一些javascript以覆蓋鏈接的默認操作並傳遞href
的值屬性爲qml,並從那裏打開。
相關問題
- 1. QT/QML從主窗口重新打開新窗口
- 2. Qt沒有正確顯示QML窗口
- 3. 在Qt中,我如何使窗口成爲當前窗口?
- 4. 如何從QML內創建新窗口?
- 5. 如何使用pyqt,qt設計器彈出新窗口
- 6. QT:如何打開一個新窗口
- 7. QT QML進口的ListModel從C++到QML
- 8. 如何使彈出式窗口成爲QT中的頂級窗口?
- 9. 如何使用帶有QML信號的自定義Qt類型?
- 10. 使用窗口調整WebView大小
- 11. 使用UISpec4J獲取所有窗口
- 12. 如何使用Html.BeginForm打開新窗口
- 13. Qt設置新窗口
- 14. 如何將Win32窗口設置爲WPF窗口的所有者?
- 15. 如何禁用QML WebView中的呈現?
- 16. 如何刪除Qt窗口中的所有子項?
- 17. 如何使Qt應用程序不使用主窗口和口令對話框?
- 18. 使用qt中的窗口消息
- 19. 窗口內的QT窗口?
- 20. 如何設置由Qt 5.6透明的QML應用程序窗口?
- 21. 如何禁用使用Qt的Alt + F4窗口關閉?
- 22. CRM 2016如何使用RibbonWorkbench作爲新窗口打開HTML窗口?
- 23. 如何在android webview中使用彈出窗口工作
- 24. 在QML Webview中使用相對URL
- 25. 如何用Qt調用窗口一次
- 26. 如何使用Gtk3 :: Gdk列出所有X11窗口
- 27. 如何使用batch/powershell將所有當前窗口最小化
- 28. 如何使用其句柄更改窗口所有者
- 29. WPF MVVM在父窗口頂部打開新窗口,並將父窗口設置爲子窗口的所有者
- 30. 如何在Linux上使用qt將窗口帶到最高層?
正如我在回答QML的WebView元素解釋不提供QWebView的全接口我不能cathch信號=( – myWallJSON 2012-05-04 13:32:04
,所以你不能使用標準的QML的WebView做你想做什麼。 – 2012-05-08 11:36:36