QAxServer: wie macht man das überhaupt?

Alles rund um die Programmierung mit Qt
Antworten
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

QAxServer: wie macht man das überhaupt?

Beitrag von harry_m »

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
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)
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Re: QAxServer: wie macht man das überhaupt?

Beitrag von harry_m »

Hier sind die Meldungen:

Hier scheint etwas im MinGW falsch konfiguriert zu sein:
Bouncer3.png
Bouncer3.png (100.07 KiB) 3369 mal betrachtet
Bouncer2.png
Bouncer2.png (105.49 KiB) 3369 mal betrachtet
Bouncer1.png
Bouncer1.png (103.14 KiB) 3369 mal betrachtet
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)
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Re: QAxServer: wie macht man das überhaupt?

Beitrag von harry_m »

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>
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)
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Re: QAxServer: wie macht man das überhaupt?

Beitrag von harry_m »

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...
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)
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Re: QAxServer: wie macht man das überhaupt?

Beitrag von harry_m »

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.
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)
Antworten