❶ 如何利用 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編寫的富媒體程序,但是可能有部分瀏覽器實現和系統中限制第三方程序的運行能力,包括其自定義網路通信能力。