要求:用qt版開發一個桌面程序,該程序有一個界面,用來顯示一個采用silverlight開發的web頁面。
分析:在qt中實現web顯示,根據qt的版本和對應編譯器的版本,有如下選擇:
(1)5.6以下的版本,基於QtWebkit
(2)5.6以上的MSVC版本,移除了QtWebkit 模塊,可采用基於 Chromium 的瀏覽器引擎 Qt WebEngine
(3)5.6以上的mingw 版本,沒有Qt WebEngine ,只能采用QAxWidget 控件
問題:用QtWebkit或Qt WebEngine,都不支持silverlight ,而QAxWidget 可以。
所以,不得不采用QAxWidget控件實現。
下面就使用QAxWidget來開發一個簡單的web browser。該程序只有一個對話框,上面是一個地址框,下面是QAxWidget控件,在地址框中輸入地址,單擊Enter鍵,就顯示該網址的內容。
1 在qtcreator中新建一個基於Dialog的程序:WebBrowser。
2 在.pro文件中加入axcontainer
QT += axcontainer
3 dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QLineEdit>
#include <ActiveQt/QAxWidget>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private slots:
void loadNavigate();
private:
Ui::Dialog *ui;
QLineEdit *lineUrl;
QAxWidget* webWidget;
};
#endif // DIALOG_H
4 dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QVBoxLayout>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
lineUrl = new QLineEdit;
lineUrl->setText("www.baidu.com");
connect(lineUrl,SIGNAL(returnPressed()),this,SLOT(loadNavigate()));
webWidget = new QAxWidget;
//設置ActiveX控件為IEMicrosoft Web Browser
//設置ActiveX控件的id,最有效的方式就是使用UUID
//此處的{8856F961-340A-11D0-A96B-00C04FD705A2}就是Microsoft Web Browser控件的UUID
webWidget->setControl(QString::fromUtf8("{8856F961-340A-11D0-A96B-00C04FD705A2}"));
webWidget->setObjectName(QString::fromUtf8("webWidget"));//設置控件的名稱
webWidget->setFocusPolicy(Qt::StrongFocus);//設置控件接收鍵盤焦點的方式:鼠標單擊、Tab鍵
webWidget->setProperty("DisplayAlerts",false); //不顯示任何警告信息。
webWidget->setProperty("DisplayScrollBars",true); // 顯示滾動條
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(lineUrl);
mainLayout->addWidget(webWidget);
setLayout(mainLayout);
setWindowState(Qt::WindowMaximized);//最大化
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::loadNavigate()
{
QString sUrl = lineUrl->text().trimmed();
webWidget->dynamicCall("Navigate(const QString&)",sUrl);
}
5 運行結果