Es soll im Siemens WinCC v.7.0 in eine Anzeige eingebunden werden: und das funktionierte auch (dort gibt es bereits ein "WebControl": das scheint ein ewig alter IE zu sein, der die gesamte Runtime irgendwann einfrieren lässt. Daher habe ich versucht, einen Ersatz zu besorgen)
Es läuft eine Weile: ich kann mehrere Male zu anderen Seiten wechseln und alles ist bestens (mein "WebControl" ist auch deutlich schneller, als das hauseigene "WebView" Control).
Bis irgendwann im QWebView Fenster nur noch der Seitenquelltext angezeigt wird. Ist es einmal passiert, dann gibt es kein Entkommen: in diesem Fall hilft nur noch die gesamte WinCC Runtime zu beenden und neu zu starten.
Erst dachte ich mir, dass hier ähnlich wie im Firefox oder IE die Seitenquelltext Anzeige "irgendwie" aktiviert wird. "Alles klar, ich bin ja klug, dann schalte ich eben wieder zurück"- Dachte ich mir. Bis ich festgestellt habe, dass ich so eine Methode gar nicht finden kann.
Jetzt bin habe ich nach einem langen Kampf mein heiß ersehntes Control und kann es nicht verwenden...
Hätte jemand vielleicht eine Idee oder einen Tipp?!
Gruß
Harry
Code: Alles auswählen
include <QtWebKit/QWebView>
#include <QWebSettings>
#include <QWebPage>
#include <QDesktopServices>
#include "webcontrol.h"
#include "objectsafetyimpl.h"
WebControl::WebControl(QWidget *parent) :
QWidget(parent)
{
urlEdit = new QLineEdit(this); // URL Eingabefeld definieren
urlEdit->setSizePolicy(QSizePolicy::Expanding,
urlEdit->sizePolicy().verticalPolicy() );
webView = new QWebView(this);
webView->settings()->setAttribute(QWebSettings::JavaEnabled, true);
webView->settings()->setAttribute(QWebSettings::JavascriptEnabled, true);
webView->settings()->setAttribute(QWebSettings::PluginsEnabled, true);
webView->settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, true);
webView->page()->settings()->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls,true);
webView->page()->settings()->setAttribute(QWebSettings::LocalContentCanAccessFileUrls,true);
webView->page()->settings()->setAttribute(QWebSettings::LocalStorageEnabled,true);
webView->page()->settings()->setAttribute(QWebSettings::AutoLoadImages,true);
webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); //Handle link clicks by yourself
// Werkzeugleiste mit einfachen Navigations-Elementen
QToolBar *toolBar = new QToolBar(tr("Navigation"));
toolBar->addAction(webView->pageAction(QWebPage::Back));
toolBar->addAction(webView->pageAction(QWebPage::Forward));
toolBar->addAction(webView->pageAction(QWebPage::Reload));
toolBar->addAction(webView->pageAction(QWebPage::Stop));
toolBar->addWidget(urlEdit);
QStringList strList;
mainLayout = new QGridLayout(this);
mainLayout->addWidget(toolBar, 1, 0);
mainLayout->addWidget(webView, 2, 0);
setLayout(mainLayout);
webView->show();
webView->load(QUrl("http://derstandard.at/Web"));
connect(urlEdit, SIGNAL(returnPressed()),
SLOT(startLoading()) );
connect( webView, SIGNAL( linkClicked( QUrl ) ),
this, SLOT( linkClickedSlot( QUrl ) ) );
QString libPath = QString("C:/WinCC_Config/WebControl/plugins");
QCoreApplication::addLibraryPath(libPath);
QStringList libPaths;
libPaths << libPath;
QCoreApplication::setLibraryPaths(libPaths);
}
WebControl::~WebControl()
{
}
void WebControl::loadUrl(QString &url) // das ist ein Slot!!!
{
webView->load(QUrl(url));
// webView->load(QUrl("http://www.visaton.de"));
}
void WebControl::setUrl(QString &url) // das ist eine Methode!
{
if((url != url2) && requestPropertyChange("targetUrl"))
{
url2 = url;
webView->load(QUrl(url));
update();
propertyChanged("targetUrl");
}
}
void WebControl::startLoading()
{
QUrl url = QUrl(urlEdit->text());
webView->load(url);
webView->setFocus();
}
// Click Handler
void WebControl::linkClickedSlot( QUrl url )
{
QString urlString = url.toString(); // URL in ein String umwandeln
if (urlString.contains(".jpg", Qt::CaseInsensitive) || urlString.contains(".pdf"), Qt::CaseInsensitive)
// wenn in de URL auf ein ".jpg" oder ".pdf" Doument zeigt:
QDesktopServices::openUrl( url ); // Standard Applikation des Systems aufrufen
else
webView->load (url); // ansonsten die URL im WebView anzeigen.
}
QAxAggregated *WebControl::createAggregate()
{
return new ObjectSafetyImpl;
}
Code: Alles auswählen
#ifndef MAINFORM_H
#define MAINFORM_H
#include <QtGui>
#include <QWidget>
#include <QtWebKit>
#include <QAxBindable>
class WebControl : public QWidget, public QAxBindable
{
Q_OBJECT
Q_PROPERTY(QString targetUrl READ targetUrl WRITE setUrl)
public:
WebControl(QWidget *parent);
~WebControl();
void setUrl(QString &url);
QString targetUrl() const {return url2;}
QAxAggregated *createAggregate();
public slots:
void loadUrl(QString &url);
private slots:
void startLoading();
// void whileLoading();
// void setProgress(int p);
// void finishLoading(bool);
void linkClickedSlot(QUrl url);
private:
// QLabel *labelURL;
QLineEdit *urlEdit;
QWebView *webView;
QGridLayout *mainLayout;
QString url2;
};
#endif // MAINFORM_H