Qt webview 使用

本文详细介绍了如何在C++项目中利用Qt进行网页动态赋值,并通过JavaScript与QtWebView进行交互,同时阐述了如何在服务器端使用PHP接收并处理上传的HTML数据,包括验证文件类型、大小及格式,最终实现文件上传。

1.在.pro文件中添加

QT       += webkitwidgets
QT       += network

这里.h和.cpp都是c++类 

在.h文件中添加头文件

#include <QWebView>
#include <QNetworkRequest>
#include <QNetworkAccessManager>

在类中添加函数

void javaScriptWindowObject();

再添加变量

QWebView* webview;

在.cpp文件构造函数中添加

    webview = new QWebView(widget);
    webview->setGeometry(screen_size.width()/8*2,screen_size.height()/16*3,screen_size.width()/7*4,screen_size.height()/2);
    webview->setVisible(true);
    webview->setUrl(QUrl("qrc:/html/index4.html"));

javaScriptWindowObject函数的实现
webview->page()->mainFrame()->addToJavaScriptWindowObject("js",widget1);

在界面函数中需要添加connect 函数链接槽和信号

connect(cprint->getwebview()->page()->mainFrame(),SIGNAL(javaScriptWindowObjectCleared()),this,SLOT(cprint->javaScriptWindowObject()));
然后将网页和js添加到资源中

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>中文</title>

</head>

<script type="text/javascript" src="qrc:/html/test.js"></script>

<body>

  <form action = "http://服务器地址/f1.php" enctype="multipart/form-data" method = "post" id ="form1">
    <center>
                <input type="file" name="file_1" id = "file_1" /><br><p/>
                xxxxxxx:
                <input type="text" name ="xxxx" id="xxxx"/><br><p/>
                yyyyyy:
                <input type="text" name = "yyyyyy" id = "yyyyyy"/>
                <input type = "button" value = "提交" onclick="test()">
     </center>
   </form>
</body>
</html>

js代码

/*window.onload =第一次调用需要添加*/function func() {

    var wID = js.sendwstr();
    var eID = js.sendestr();
    var fID = js.sendfstr();

    document.getElementById("xxxx").value = wID;
    document.getElementById("yyyy").value = eID;
    document.getElementById("file_1").value = fID;

}

function test()
{
    func();

    document.getElementById("form1").submit();
}


这样就可以实现给网页动态赋值,但是file控制不允许后台给值


在服务器端使用php接收html上传的数据

<?php
header ('Content-type: text/php;charset=UTF-8');
//echo iconv("GB2312","UTF-8",'中文');
if(NULL!=$_POST['w'])
	$sendweixin = $_POST['xxxx'];
if(NULL!=$_POST['e'])
	$sendemail = $_POST['yyyy'];
		
echo $_FILES["file_1"]["type"];
define('MAX_SIZE',20000000);
if($_FILES["file_1"]["error"]>0)
{
 echo "文件上传失败";
 }
 else
 {
  if($_FILES["file_1"]["type"]!='image/jpeg' && $_FILES["file_1"]["type"]!="image/pjpeg" && $_FILES["file_1"]["type"]!="image/png" && $_FILES["file_1"]["type"]!="image/gif")
  {
   echo "<script>alert('图片格式不正确!请重新上传!');history.back();</script>";
  }
  
  else{
   if($_FILES["file_1"]["size"]>MAX_SIZE)
   {
		echo "<script>alert('文件大小超出范围!');history.back();</script>";
    }
   }
   if(move_uploaded_file($_FILES["file_1"]["tmp_name"],"image/".date("y-m-d",time()).$_FILES["file_1"]["name"]))
   echo "文件上传成功";
	//echo $sendweixin;
	//echo $sendemail;
	$pict_name = date("y-m-d",time()).$_FILES["file_1"]["name"];
	

	setcookie("link_sendweixin",$sendweixin);
	setcookie("link_sendemail",$sendemail);
	setcookie("link_Position",$pict_name);
	//setcookie("link_servermail",$servermail);
	
	//session_start();
	//$_SESSION["temp"]=array($sendweixin,$sendemail);
	
	header("location:insertsql.php");
 }
?>


<think> 根据引用内容,QtWebViewQt框架的不同版本中有不同的使用方式: 1. Qt4使用webkit模块(已过时) 2. Qt5.0~5.3使用webkitwidgets模块(已过时) 3. Qt5.4及以上版本推荐使用Qt WebEngine模块(即QWebEngineView) 4. 另外有一个QtWebView模块,主要用于移动端嵌入式Web视图 用户要求的是QtWebView的信息,但注意:引用[1]中提到的“QtWebView”与引用[2]中的QWebView(属于webkit)不同。需要澄清: - 引用[1]中提到的“3、QtWebView”是一个独立的模块,用于在移动平台上提供轻量级的Web视图,不支持桌面平台。 - 引用[2]中的QWebView是旧版WebKit模块的一部分,已不推荐使用。 因此,回答应分为两部分: 1. 澄清QtWebView模块(用于移动端)和旧版QWebView(已废弃)的区别 2. 针对现代Qt版本(Qt5.4以上)推荐使用Qt WebEngine 由于用户明确要求QtWebView,但引用中显示它主要用于移动端,所以需要说明其适用场景。 同时,引用[3]提供了设置cookie的示例代码,但它是针对PyQt4和QWebView(旧版)的。现代Qt WebEngine设置cookie的方式不同。 因此,回答结构如下: 1. 介绍QtWebView模块(移动端)的功能和使用场景 2. 介绍现代桌面应用推荐的Qt WebEngine(QWebEngineView) 3. 提供QtWebView在移动端的使用示例(如果用户需要) 4. 提供Qt WebEngine的示例(因为更常用) 注意:用户可能混淆了QtWebView(移动端模块)和QWebView(旧版webkit组件)。需要明确区分。 由于引用中没有QtWebView(移动端)的具体代码示例,只有引用[2]是旧版QWebView的示例,引用[3]是旧版设置cookie的代码。因此,对于移动端的QtWebView,需要查找官方文档的典型用法。 根据Qt官方文档: - QtWebView模块提供了一个在移动平台上显示Web内容的简单视图,但功能比WebEngine弱,且不支持桌面平台。 - 使用QtWebView需要先在pro文件中添加:`QT += webview` - 然后在代码中`#include <QtWebView>`,并在创建应用实例后调用`QtWebView::initialize()`(在某些平台需要初始化) - 使用`QQuickView`(QML)或`QWebEngineView`(C++)来显示网页 但是,在C++中,QtWebView模块提供了一个`QQuickView`的封装,通常与QML一起使用。在QML中,使用`WebView`元素。 因此,示例代码将分为: 1. 移动端(使用QML)的QtWebView示例 2. 桌面端使用Qt WebEngine(QWebEngineView)的示例 另外,如果用户坚持要旧版QWebView(已废弃)的信息,也可以提供,但不推荐。 现在,按照用户要求生成回答: </think> ### QtWebView 介绍、使用方法及示例 #### 一、QtWebView 简介 QtWebViewQt 框架中用于在移动端应用中嵌入 Web 内容的轻量级模块,**不支持桌面平台**(桌面端需用 QWebEngineView)[^1]。其特点包括: 1. **跨平台性**:支持 Android/iOS 等移动平台 2. **轻量级**:依赖平台原生 Web 引擎(Android-WebView/iOS-WKWebView) 3. **功能基础**:适合简单网页展示,不支持完整 WebEngine 功能 4. **低资源占用**:相比 WebEngine 更节省内存 #### 二、使用方法(移动端) ##### 1. 环境配置 在项目文件 `.pro` 中添加: ```qmake QT += webview ``` ##### 2. 初始化(必须) 在应用启动时初始化: ```cpp #include <QtWebView> int main(int argc, char *argv[]) { QApplication app(argc, argv); QtWebView::initialize(); // 关键初始化步骤 // ... } ``` ##### 3. QML 使用示例 ```qml import QtWebView 1.1 WebView { id: webview anchors.fill: parent url: "https://www.qt.io" onLoadingChanged: { if (loadRequest.status === WebView.LoadSucceededStatus) console.log("Page loaded successfully") } } ``` ##### 4. C++ 设置 Cookie(需用原生接口) ```cpp // Android 示例(Java 层操作) QJniObject cookieManager = QJniObject::callStaticObjectMethod( "android/webkit/CookieManager", "getInstance", "()Landroid/webkit/CookieManager;" ); cookieManager.callMethod<void>( "setCookie", "(Ljava/lang/String;Ljava/lang/String;)V", QJniObject::fromString("https://example.com").object(), QJniObject::fromString("user_token=abc123; Path=/").object() ); ``` #### 三、注意事项 1. **桌面兼容性**:桌面开发请改用 `QWebEngineView`(需 `QT += webenginewidgets`)[^1] 2. **功能限制**: - 不支持 WebGL/WebRTC 等高级特性 - 无开发者工具 - 受限的 JavaScript 控制能力 3. **性能优化**: ```qml WebView { settings.allowFileAccess: false // 禁用本地文件访问 settings.javascriptEnabled: true // 按需启用 JS } ``` #### 四、典型应用场景 1. 移动 App 内嵌帮助文档 2. 展示动态更新的活动页面 3. 集成第三方登录(OAuth 网页授权) 4. 混合开发中的简单 Web 模块 > **替代方案参考**: > 若需完整浏览器功能(桌面/移动均可),使用 Qt WebEngine: > ```cpp > QWebEngineView *view = new QWebEngineView; > view->load(QUrl("https://qt.io")); > view->show(); > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值