(1) 讓qwebview 設置代理服務器
QNetworkProxyproxy;
proxy=QNetworkProxy::HttpProxy;
proxy.setHostName(tr("15.12.110.252"));//代理服務器
proxy.setPort(8080);
netwkAcssMng=new QNetworkAccessManager;
netwkAcssMng->setProxy(proxy);
webV=qFindChild<QWebView*>(this,"webView");//全局函數
webV->page()->setNetworkAccessManager(netwkAcssMng);
webV->load(QUrl("http://www.google.com.hk/"));
webV->show();
(2) 給qtwebkit 創建 插件
#include"intelliplugin.h"
#include"shineprint.h"
#include<QDebug>
#include<QWebView>
IntelliPlugin::IntelliPlugin(QWidget*parent):
QWebPluginFactory(parent)
{
qDebug()<<"IntelliPlugin::IntelliPlugin()"<<endl;
MimeTypemime;
mime.name="application/print-plugin";
m_mimeType.append(mime);
}
IntelliPlugin::~IntelliPlugin()
{
}
QObject*IntelliPlugin::create(constQString&mimeType,constQUrl&,constQStringList&argumentNames,constQStringList&argumentValues)const
{
qDebug()<<"IntelliPlugin::create()"<<endl;
foreach(MimeTypemime,this->m_mimeType){
if(!mime.name.isEmpty()&&mime.name==mimeType){
if(mimeType=="application/print-plugin"){
qDebug()<<"createshineprint"<<endl;
//寫入自己的類
ShinePrint*pShinePrint=newShinePrint();
qDebug()<<"finishcreateshineprint."<<endl;
returnpShinePrint;
}
}
}
returnNULL;
}
QList<IntelliPlugin::Plugin>IntelliPlugin::plugins()const
{
Pluginplugin;
plugin.name="application/print-plugin";
plugin.description="JustforPrintMessagecalltest";
plugin.mimeTypes.append(m_mimeType);
QList<IntelliPlugin::Plugin>plugList;
plugList.append(plugin);
returnplugList;
}
shineprint.cpp 類
ShinePrint::ShinePrint(QWidget*parent):
QLabel(parent)
{
qDebug()<<"ShinePrint::ShinePrint()"<<endl;
}
ShinePrint::~ShinePrint()
{
qDebug()<<"ShinePrint::~ShinePrint()"<<endl;
}
voidShinePrint::PrintMessag(QStringmsg)
{
QMessageBoxmsgBox;
//QFontfont;
//font.setPixelSize(30);
//msgBox.setFont(font);
msgBox.setText(msg);
msgBox.setInformativeText("Justfortest!");
msgBox.setStandardButtons(QMessageBox::Save|QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Save);
msgBox.exec();
qDebug()<<"JavaAlert()JavaScriptWillbecalled"<<endl;
//view->page()->mainFrame()->evaluateJavaScript("JavaAlert();");
qApp->exit(0);
}
(3) 讓javascript 調用c++ 類
http://www.linuxidc.com/Linux/2012-04/58359.htm
<object type="application/print-plugin" data="http://www.sohu.com" width="1" height="1" id="Callobject">
</object>
function print() {
var s5 = "請耐心等待,過號請到分診台重新分診,謝謝合作";
/*調用的Qt中的方法: class ShinePrint::void PrintMessag(QString msg)*/
var printResult = document.getElementById("Callobject").PrintMessag(s5);
if (printResult < 0)
alert("網絡出現故障,打印失敗,請聯系管理員");
}
<button onclick="print()">clickqtjavascript </button>
webview 進行必要的設置
ui->webView->settings()->setAttribute(QWebSettings::PluginsEnabled,true);
ui->webView->settings()->setAttribute(QWebSettings::JavascriptEnabled,true);
ui->webView->page()->setPluginFactory(newIntelliPlugin);
(4) 當一個load一個頁面 ,希望通過點擊這個頁面的2級連接來做其他事情:,其中需要在 load之后
ui->webView->load(QUrl("http://www.baidu.com"));
ui->webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
需要給webveiw 的siganal (linkClicked) 加個槽函數
voidMainWindow::on_webView_linkClicked(constQUrl&arg1)
{
ui->webView->load(QUrl("http://www.qq.com"));
QMessageBoxhimessagebox;
himessagebox.setText("hitodayisaniceday");
himessagebox.exec();
}// 這樣就行了
打開本地 html 文件
QStringfilename=QFileDialog::getOpenFileName(this,tr("打開文件..."),QString(),tr("網頁文件(*.htm*.mht*.html);;AllFiles(*.*)"));
if(!filename.isEmpty())
{
ui->webView->settings()->setAttribute(QWebSettings::PluginsEnabled,true);
ui->webView->settings()->setAttribute(QWebSettings::JavascriptEnabled,true);
ui->webView->page()->setPluginFactory(newIntelliPlugin);
ui->webView->load(QUrl::fromUserInput(filename));
QStringcurFile=QFileInfo(filename).canonicalFilePath();//獲得文件的標准路徑
this->setWindowTitle(curFile+"-WebView");
//this->statusLabel->setText("");
}
隱藏qwebview 的滑動條
ui.webView->page()->mainFrame()->setScrollBarPolicy(Qt::Horizontal,Qt::ScrollBarAlwaysOff);
ui.webView->page()->mainFrame()->setScrollBarPolicy(Qt::Vertical,Qt::ScrollBarAlwaysOff);
ui.webView_2->page()->mainFrame()->setScrollBarPolicy(Qt::Horizontal,Qt::ScrollBarAlwaysOff);
ui.webView_2->page()->mainFrame()->setScrollBarPolicy(Qt::Vertical,Qt::ScrollBarAlwaysOff);
qt 啟動其他默認瀏覽器打開一個網頁
Qt.openUrlExternally("http://yoururl")
Qt.openUrlExternally("tel:<number>")
QDesktopServices::openUrl(arg1);
qt 調用html頁面的javascript
ui.webView->page()->mainFrame()->evaluateJavaScript("helloworld()"); //helloworld是html 里面的自定義javascript 方法
任何獲得焦點的控件 不論是qt自己的控件還是html頁面里德控件都會 獲得剪切板里面的文字
ui.webView->page()->setContentEditable(true);
ui.webView->page()->triggerAction(QWebPage::Paste,true);