Hallo Gemeinde,
ich habe mir vorgenommen, ein QWebView in ein Widget zu packen und unter Windows als COM-Objekt zu verwenden. (Glaubt mir, es ist kein Hirngespinst, ich brauche es wirklich und dringend...)
Im Buch "C++ GUI Programming with Qt4" von Jasmin Balnchette fand sich auch ein gut beschriebenes Beispiel. Es dürfte ja nix schief gehen... Dachte ich mir.
Ich fing gleich mit meiner Applikation an: und blieb stecken... OK, kein Problem. Versuchen wir es anders herum: wir nehmen das Beispiel aus dem Buch (Kap. 23, "bouncer") das muss ja laufen... Dachte ich mir.
Dumm ist, dass ich nicht mal das Beispiel zum Laufen bekomme. Mir scheint, es wurde dabei vergessen, ein Paar wichtige Kleinigkeiten zu erwähnen: denn so dumm stand ich noch nie mit einem Beispiel da.
Hat es jemand schon mal gemacht?
Ich habe den Qt Creator 2.5 und Qt in der Version 4.8.1.
Muss ich dafür vielleicht noch irgendwelche Windows-Bibliotheken oder andere Komponenten haben? Muss ich irgendwelche Umgebungsvariablen setzen?
Ich habe wie immer brav im Forum recherchiert: ein Paar Leute haben es schon vollbracht. Offensichtlich ohne größere Probleme. Und genau das macht mich so stutzig.
Als erstes will ich herausfinden, ob es hier überhaupt jemanden gibt, der helfen kann. Morgen werde ich die Einzelheiten beschreiben (will jetzt am Abend meinen Geschäftsrechner nicht mehr auspacken...)
Gruß
Harry
QAxServer: wie macht man das überhaupt?
QAxServer: wie macht man das überhaupt?
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
Re: QAxServer: wie macht man das überhaupt?
Hier sind die Meldungen:
Hier scheint etwas im MinGW falsch konfiguriert zu sein:
Hier scheint etwas im MinGW falsch konfiguriert zu sein:
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
Re: QAxServer: wie macht man das überhaupt?
Es ist mir nicht gelungen, die Aufgabe im QtCreator zu erledigen.
Dann habe ich kurzerhand den "qt-vs-addin-1.1.11-opensource" installiert und die bounce.dll im Visual Studio erzeugt. Das ging auf Anhieb.
Die .dll ist via regsvr32 registriert, wird aber in der html-Seite, die dem "bouncer"-Beispiel beigefügt istr im IE8 immer noch nicht angezeigt... (S. unten...)
Jetzt weiß ich nicht mal ansatzweise, wo und wonach ich suchen soll.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>The AxBouncer Widget in Action</title>
</head>
<body>
<h1>AxBouncer</h1>
<p>
<object id="AxBouncer"
classid="clsid:5e2461aa-a3e8-4f7a-8b04-307459a4c08c">
<b>The ActiveX control is not available. Make sure you have built and
registered the component server.</b>
</object>
<form>
<p>
<input type="button" value="Start" onClick="AxBouncer.start()">
<input type="button" value="Stop" onClick="AxBouncer.stop()">
<p>
<table>
<tr>
<td>Color:
<td><input type="edit" id="colorEdit" value="blue">
<td><input type="button" value="Set" onClick="setColor(this.form)">
<tr>
<td>Speed:
<td><input type="edit" id="speedEdit" value="Normal">
<td><input type="button" value="Set" onClick="setSpeed(this.form)">
<tr>
<td>Radius:
<td><input type="edit" id="radiusEdit" value="15">
<td><input type="button" value="Set" onClick="SetRadius(this.form)">
</table>
</form>
<script language="JavaScript">
function setColor(form)
{
AxBouncer.color = form.colorEdit.value;
}
function setSpeed(form)
{
AxBouncer.speed = form.speedEdit.value;
}
function AxBouncer::bouncing()
{
document.title = "Bouncing again!";
}
</script>
<script language="VBScript">
Sub SetRadius(form)
AxBouncer.radius = form.radiusEdit.value
End Sub
</script>
</body>
</html>
Dann habe ich kurzerhand den "qt-vs-addin-1.1.11-opensource" installiert und die bounce.dll im Visual Studio erzeugt. Das ging auf Anhieb.
Die .dll ist via regsvr32 registriert, wird aber in der html-Seite, die dem "bouncer"-Beispiel beigefügt istr im IE8 immer noch nicht angezeigt... (S. unten...)
Jetzt weiß ich nicht mal ansatzweise, wo und wonach ich suchen soll.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>The AxBouncer Widget in Action</title>
</head>
<body>
<h1>AxBouncer</h1>
<p>
<object id="AxBouncer"
classid="clsid:5e2461aa-a3e8-4f7a-8b04-307459a4c08c">
<b>The ActiveX control is not available. Make sure you have built and
registered the component server.</b>
</object>
<form>
<p>
<input type="button" value="Start" onClick="AxBouncer.start()">
<input type="button" value="Stop" onClick="AxBouncer.stop()">
<p>
<table>
<tr>
<td>Color:
<td><input type="edit" id="colorEdit" value="blue">
<td><input type="button" value="Set" onClick="setColor(this.form)">
<tr>
<td>Speed:
<td><input type="edit" id="speedEdit" value="Normal">
<td><input type="button" value="Set" onClick="setSpeed(this.form)">
<tr>
<td>Radius:
<td><input type="edit" id="radiusEdit" value="15">
<td><input type="button" value="Set" onClick="SetRadius(this.form)">
</table>
</form>
<script language="JavaScript">
function setColor(form)
{
AxBouncer.color = form.colorEdit.value;
}
function setSpeed(form)
{
AxBouncer.speed = form.speedEdit.value;
}
function AxBouncer::bouncing()
{
document.title = "Bouncing again!";
}
</script>
<script language="VBScript">
Sub SetRadius(form)
AxBouncer.radius = form.radiusEdit.value
End Sub
</script>
</body>
</html>
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
Re: QAxServer: wie macht man das überhaupt?
Also mit viel Geduld ist es mir gelungen, das Beispiel zum Laufen zu bekommen. Aber es scheint eine sehr wackelige Angelegenheit zu sein. Bei einem Anderen von der Nokia-Seite ging es schon damit los, dass das Projekt nicht übersetzt werden konnte.
Mit dem WebView klappt es aber immer noch nicht...
Mit dem WebView klappt es aber immer noch nicht...
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
Re: QAxServer: wie macht man das überhaupt?
Nachdem viele Fehler und Missverständnisse beseitigt wurden hat es sogar geklappt. Wie, werde ich später beschreiben, denn ich finde das gehört gemacht: es gibt zu viele Kleinigkeiten, die bei dieser Aufgabe im Weg liegen und diesen (Weg) unnötig lang und zeitraubend.
Jetzt bin ich so weit, dass ich das ActiveX Control in das ich mein WebView verpackt habe übersetzt und im System registriert werden kann.
Ich habe es in eine HTML-Seite eingepackt und kann es beim Aufruf im Browser auch sehen: nur der Inhalt der vorgegebenen Seite ist nicht sichtbar: an dieser Stelle klafft immer noch ein weißes Viereck. Ich habe jetzt keine Ahnung, was fehlt.
Um die grundsätzliche Funktionalität zu testen habe die URL gleich im Konstruktor vorgegeben:
WebControl::WebControl(QWidget *parent) :
QWidget(parent)
{
webView = new QWebView(this);
mainLayout = new QGridLayout(this);
mainLayout->addWidget(webView, 1, 0);
setLayout(mainLayout);
webView->show();
webView->load(QString("http://derstandard.at/Web"));
update();
}
Es kommt aber nix.
Jetzt ist die Frage zu klären, ob ich hier etwas falsch mache, oder ob es grundsätzlich nicht möglich ist ein WebKit Fenster im IE8 anzuzeigen.
Jetzt bin ich so weit, dass ich das ActiveX Control in das ich mein WebView verpackt habe übersetzt und im System registriert werden kann.
Ich habe es in eine HTML-Seite eingepackt und kann es beim Aufruf im Browser auch sehen: nur der Inhalt der vorgegebenen Seite ist nicht sichtbar: an dieser Stelle klafft immer noch ein weißes Viereck. Ich habe jetzt keine Ahnung, was fehlt.
Um die grundsätzliche Funktionalität zu testen habe die URL gleich im Konstruktor vorgegeben:
WebControl::WebControl(QWidget *parent) :
QWidget(parent)
{
webView = new QWebView(this);
mainLayout = new QGridLayout(this);
mainLayout->addWidget(webView, 1, 0);
setLayout(mainLayout);
webView->show();
webView->load(QString("http://derstandard.at/Web"));
update();
}
Es kommt aber nix.
Jetzt ist die Frage zu klären, ob ich hier etwas falsch mache, oder ob es grundsätzlich nicht möglich ist ein WebKit Fenster im IE8 anzuzeigen.
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)