❶ 如何利用 QT 进行 web 与本地混合应用开发
如何利用 QT 进行 web 与本地混合应用开发是本文要讲述的内容,Qt提供了本地 C++对象与JavaScript的无缝集成,是进行本地与web混合应用开发的理想平台。
一、Qt Webkit 集成
利用Qt的Webkit 集成与QtNetwork模块,你完全可以进行本地桌面与web混合应用开发,你可以自由地混合JavaScript,样式表,Web内容和Qt组件。 Webkit是一个非常成熟的web浏览引擎。Qt中集成了这个大名鼎鼎的引擎,通过QtWebkit,你可以在C++ 中执行JavaScript,或者在网页中集成C++对象,并且通过JavaScript和这些对象进行交互。
一个现代的HTML渲染引擎只 是混合开发的一半,另一半就是本地应用和渲染对象的交互。QT的Webkit 集成提供了这种解决方案:
1.使用object标签嵌入Qt Widgets组件。这可以让使用C++代码的Qt组件包含在网页中,作为网页的部分外观。
2.在JavaScript中访问C++对象。你 可以在JavaScript环境中插入C++对象,让网页脚本直接访问你的数据结构。
3.在Qt中执行JavaScript。你可以在C++ 调用网页环境中的JavaScript函数,触发网页事件。
4.共享客户端存储。在JavaScript和C++中你都具有访问数据库的能 力,这样当下线时也能共享大量数据。
二、与嵌入的Qt对象交互
使用 QWebView 组件,有两种方法可以在网页中嵌入C++对象。你可以在网页的JavaScript中添加C++对象,或者也可以创建一个插件,然后在网页中使用 object标签嵌入。
第二种方法更容易入手。当在网页中放入 Widget组件时,它的所有public slots就像普通函数一样被网页中的JavaScript函数访问。
要在网页中添加一个Widget,首先要告诉你的QWebPage对象,该Widget可用,这个通过子类化QWebPlugFactory完成,
你需要 重新实现两个方法:plugs和create。plugs方法通知网页该Widget可用,create方法根据请求创建widget。
在 HTML网页中,widgets使用object标签创建。比如,下面这个标签试图创建一个 application/x-qt-colorlabel组件。
<object type="application/x-qt-colorlabel" width="50px" height="20px" id="label" />
要利用这种创建,必须要允许使用插件并且要告诉QWebpage插件的工厂类。在下面的代码中,ColorLabelFactory将 会根据application/x-qt-colorlabel的请求创建相应实例。
QWebSettings::globalSettings()->setAttribute(QWebSettings::PluginsEnabled, true); webView->page()->setPluginFactory(new ColorLabelFactory(this));
ColorLabel有一个公开的slot: chagneColor(),这个对于网页中的JavaScript自动可用。在网页中插入一个指向该元素的链接,可以以一种简单的方式激活C++函数。
<a href='javascript:document.getElementById("label").changeColor();'>Change color!</a>
要反方向推进事件,必须要使你的对象在JavaScript文档上下文中可用。要对QWebPage的每一个 QWebFrame,调用addToJavaScriptWindowObject方法。这个方法允许你根据名字把一个对象添加到JavaScipt上下 文中。
webView->page()->mainFrame()->addToJavaScriptWindowObject( "eventSource", new eventSource( this ) );
要连接刚添加对象eventSource的信号,要加上一段JavaScript代码,使用evaluateJavaScript方法
完成。下面的代码将把eventSource对象的signalName信号连接到一个JavaScript函数destFunction。
webView->page()->mainFrame()->evaluateJavaScript( "eventSource.signalName.connect(destFunction);" );
如果你把一个对象添加到一个以标准浏览器查看的JavaScript页面中,有一个信号需要知道。每一次JavaScript
内容被清除,Frame都会释放 javaScriptWindowObjectCleared
信号。为了使你的Qt对象一直可用,你需要连接这个信号,并且在这里调用 addToJavaScriptWindowObject函数。
❷ qt中用tcp怎么实现客户端给服务器发消息
通常来说我们的服务器是分三类,数据库的服务器,web的服务器,以及其他应用的服务器。这些其实都是小型机,服务器,只不过是根据用途不同而分类。正常来说一个网站的常规服务器的架构就是这三块。
他所说的 " 数据库连接到服务器" 可能是指 "怎么样把web服务器和数据库能够建立连接 " 。这里所说的web服务器应该是指tomcat,apache,IIS,weblogic之类的东西,而不是真正意义上的web服务器。
这样的话就简单了。要么ODBC要么JDBC,该怎么样怎么样。ODBC就是添加到数据源,JDBC就是要写JDBC驱动,或者使用mybatis之类的解决方案
❸ QT如果HTTP代理开了,还查的到独立IP么
你好,http代理分多种,这要看是用的哪种IP代理。理论是所有的IP都能查到,问题是值不与值的问题!
http代理IP分高匿名,匿名和透明:
高度匿名代理不改变客户机的请求,这样在服务器看来就像有个真正的客户浏览器在访问它,这时客户的真实IP是隐藏的,服务器端不会认为我们使用了代理。
普通匿名代理能隐藏客户机的真实IP,但会改变我们的请求信息,服务器端有可能会认为我们使用了代理。不过使用此种代理时,虽然被访问的网站不能知道你的ip地址,但仍然可以知道你在使用代理,当然某些能够侦测ip的网页仍然可以查到你的ip
透明代理,它不但改变了我们的请求信息,还会传送真实的IP地址。
总结:三者隐藏使用代理者身份的级别依次为高度匿名代理最隐蔽,其次是普通匿名代理,最差的是透明代理。
有疑问请追问,谢谢
❹ 用qt开发webservice客户端
# filename: cli.pro
LIBS += -lwsock32
SOURCES += \
main.cpp \
..\gsoap\soapC.cpp \
..\gsoap\soapClient.cpp \
..\gsoap\stdsoap2.cpp
# for proxy
SOURCES += \
..\gsoap\soapcuProxy.cpp
❺ 请教在QT5里如何建立http服务器,可以从网页通过url访问文件
http协议是在tcp/ip协议上建立起来了,要在Android上建立一个http服务器的话,确实挺麻烦的.使用现成的,到是会节省一些时间,但是现成的都不太完善,如果需要自己去实现http协议的话,会很花时间.
如果楼主只是想访问手机上的文件,很多种方式都可以,有很多现成的android应用可以做到.
或者楼主考虑使用ftp服务器来代替http服务器.这样会简单很多,而且也可以在浏览器里面访问.
再或者看下有没有人把Apache HTTP Server,移植到android上面.
❻ 基于HTTP协议,编写一个简单的Web服务器。 能够支持简单的文本、图片等请求。用QT creator 。感谢大神
你这个课选的太高级。恕我无能为力啊。。有事问度娘吧。
❼ 用C++写一个最简单的web服务器,qt做界面。要求在界面显示服务器连接日志。 直接把服务器代码
如果你是想链表和Qt做在同一个进程里面的话.
把链表直接做成 静态或动态库 给 Qt调用就可以了.
如果在两个进程里面的话就要搞进程间通信也许就要另外开线程了.
Qt做界面可以不用VC的.下个Qt creator 也不错.
❽ 请教Qt访问webservice的例子
根据 SOAP 1.1 标准,POST XML 来访问 WEBSERVICE ,会非常方便,QT 本身有 XML 的解析工具QDomDocument/QXmlReader。将 POST 的结果进行处理也是非常方便的。
实际应用的时候,只要更改 URL、SOAPAction 、参数、NameSpace 等必要的元素,即可。
QUrlurl(urlLineEdit->text());
QHttpRequestHeaderheader("POST",url.path());
header.setValue("Host",url.host());
header.setContentType("text/xml;charset=utf-8");
header.setValue("SOAPAction",""http://tempuri.org/HelloWorld"");
QStringcontent("<?xmlversion="1.0"encoding="utf-8"?>"
"<soap:Envelopexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">"
"<soap:Body>"
"<HelloWorldxmlns="http://tempuri.org/">sdafwer</HelloWorld>"
"</soap:Body>"
"</soap:Envelope>"
);
//header.setValue("Content-Length",tr("%1").arg(11));
http->setHost(url.host());
httpRequestAborted=false;
httpGetId=http->request(header,content.toUtf8(),buffer);
本文仅示范如何得到 WEBSERVICE 的结果,没有将结果进行处理。
❾ Qt网络编程 服务器异常断开,不能检查到网络状态变化
自己做心跳保活。因为异常断开不属于qt的处理范围,而tcp协议栈又不存在自动处理异常断线的功能,tcp连接在不正常关闭情况下通常都会被协议栈保持存活一段时间(具体和操作系统协议栈实现和设置有关)。qt无法获得tcp协议栈的状态消息,也就不会做出任何反应。所谓心跳机制请参照以下网址内容:
http://ke..com/view/4372209.htm
❿ html写的页面如何与QT写的服务器建立连接传值,重点是服务器端代码怎么写
1.Qt编写的服务器端实现Http协议的部分功能,包括request和reply。下边是RFC2616:
http://wenku..com/view/4402da4bf7ec4afe04a1dfcb.html
Qt的network组件没有实现http server的类,所以要自己动手编写。
2.在html页面中嵌入flash/silverlight/java编写的富媒体程序,但是可能有部分浏览器实现和系统中限制第三方程序的运行能力,包括其自定义网络通信能力。