Du bist nicht angemeldet.

Timon L.

Anfänger

  • »Timon L.« ist der Autor dieses Themas

Beiträge: 45

Registrierungsdatum: 12.08.2012

Wohnort: GM

Danksagungen: 9

  • Private Nachricht senden

1

16.04.2013, 20:26

QtWebkit - C++-Funktion in Javascript aufrufen

Hey Leute,

ich brauche (schon wieder) eure Hilfe. Da ich großes Interesse an grafischen Programmen habe, wollte ich mir mal Qt anschauen. Im Designer konnte man auch eine HTML5-App auswählen, und da mein kleines Projekt dort sehr einfach zu bewältigen ist, habe ich das gewählt.
Die Hauptfunktionen sind auch schon in Javascript implementiert, allerdings fehlt mir noch die Möglichkeit, eine Datei zu speichern, was so ziemlich das wichtigste an dem Programm ist. Das ist mit den fstreams von C++ ja eigentlich kein Problem.

Jetzt ist aber meine Frage: Wie schaffe ich es, die C++-Funktion innerhalb des Javascript-Codes aufzurufen? Ich habe mir ein paar der Beispiele diesbezüglich von Qt angeschaut, aber ehrlich gesagt nicht viel zu diesem Bereich verstanden.

/* Nebenbei noch eine weitere kleine Frage: Im automatisch generierten HTML-Dokument steht folgender Code:

HTML

1
2
3
4
5
6
7
8
 window.onload = function()
    {
        document.getElementById("quit").onmousedown = function()
        {
            Qt.quit();
        };
        toggleElement();
 }


Wofür genau ist das "function()"? Ich habe das so noch nie in einem Javascript-Code gesehen, muss ich gestehen. */ hat mein Bruder schon erklärt :D

Falls irgendwie nötig, hier der Code meiner beiden Dateien - er ist noch nicht so schön, aber an die Optimierung mache ich mich erst, sobald ich dieses Problem gelöst hab. Anfangs war er wesentlich besser, aber ich habe das ganze mittlerweile so weit wie möglicht vereinfacht, um irgendwelche offensichtlichen Fehlerquellen auszuschließen.

index.html:

Spoiler Spoiler

HTML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link href="style.css" rel="stylesheet" type="text/css" />
        <script type="text/javascript">
            var last = 0;
            function add(which, freq) {
                if(last != which) {
                    document.getElementById("content").innerHTML += which + " (" + freq + "): " + window.document.input.durin.value + "<br>";
                    last = which;

                    document.getElementById("code").innerHTML += "PlayTone(" + freq + ", " + window.document.input.durin.value + ");" + "\n";
                }
            }

            function save() function(){
                file.saveToFile();
            }
        </script>
    </head>
    <body>
        <div style="width: 100%; min-height: 200px; max-height: 200px; visible: auto; text-align: center;" id="pianoborder">
            <div class="full" onClick="add('A3', 220)"><p><br><br><br><br><br><br><br>A3</p></div>
            <div class="full" onClick="add('H3', 247)"><p><br><br><br><br><br><br><br>H3</p></div>
            <div class="full" onClick="add('C4', 262)"><p><br><br><br><br><br><br><br>C4</p></div>
            <div class="full" onClick="add('D4', 294)"><p><br><br><br><br><br><br><br>D4</p></div>
            <div class="full" onClick="add('E4', 330)"><p><br><br><br><br><br><br><br>E4</p></div>
            <div class="full" onClick="add('F4', 349)"><p><br><br><br><br><br><br><br>F4</p></div>
            <div class="full" onClick="add('G4', 392)"><p><br><br><br><br><br><br><br>G4</p></div>
            <div class="full" onClick="add('A4', 440)"><p><br><br><br><br><br><br><br>A4</p></div>
            <div class="full" onClick="add('H4', 494)"><p><br><br><br><br><br><br><br>H4</p></div>
            <div class="full" onClick="add('C5', 523)"><p><br><br><br><br><br><br><br>C5</p></div>
            <div class="full" onClick="add('D5', 587)"><p><br><br><br><br><br><br><br>D5</p></div>
            <div class="full" onClick="add('E5', 659)"><p><br><br><br><br><br><br><br>E5</p></div>
            <div class="full" onClick="add('F5', 698)"><p><br><br><br><br><br><br><br>F5</p></div>
            <div class="full" onClick="add('G5', 784)"><p><br><br><br><br><br><br><br>G5</p></div>
            <div class="full" onClick="add('A5', 880)"><p><br><br><br><br><br><br><br>A5</p></div>
            <div class="full" onClick="add('H5', 988)"><p><br><br><br><br><br><br><br>H5</p></div>
            <div class="full" onClick="add('C6', 1047)"><p><br><br><br><br><br><br><br>C6</p></div>
        </div>
        <form name="input">
            <p><br>Dauer in ms:</p> <input type="text" size="4" maxlength="4" name="durin" value="100">
            <input type="button" name="send" value="Fertig!" onClick="save()">
        </form>
        <div style="height: 400px; min-width: 200px; max-width: 200px; border: solid; margin: auto; margin-top: 10%; overflow: auto;" id="content"></div>
        <textarea noresize="noresize" readonly="readonly" id="code"></textarea>
    </body>
</html>


main.cpp:

Spoiler Spoiler

C/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <QApplication>
#include <fstream>
#include "html5applicationviewer.h"

using namespace std;

void initFile() {
    fstream f;
    f.open("music.nxc", ios::trunc|ios::out);
    f << "task main() {" << endl;
    f.close();
}

class fileSave : public QObject {
public:
    void saveToFile();
};

void fileSave::saveToFile() {
    fstream f;
    f.open("music.nxc", ios::out|ios::app);
    f << "success!" << endl;
    f.close();
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    Html5ApplicationViewer viewer;
    viewer.resize(1280, 800);
    viewer.setOrientation(Html5ApplicationViewer::ScreenOrientationAuto);
    viewer.showExpanded();

    viewer.loadFile(QLatin1String("html/index.html"));

    initFile();
    fileSave file;

    return app.exec();
}


Ich habe übrigens für das Speichern nur eine einzelne Klasse genutzt, weil ich in einem Qt-Forum gelesen habe, dass der Zugriff so möglich sein soll, allerdings hat das nicht geklappt.

Vielen Dank im Voraus!

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Timon L.« (16.04.2013, 20:53)


Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

2

16.04.2013, 21:06

Kp von c++ und davon schon gar net, aber zu dem "function()": da wird einfach eine anonyme funktion erstellt mit "= function() {...}". könnte man jetzt halt auch noch parameter mitgeben (der funktion wird theoretisch sogar einer übergeben, nämlich das event-objekt)... durch die zuweisung ist die funktion hinterher de facto nicht mehr anonym, aber davor halt syntaktisch schon...

und btw, wie wärs mit xhtml, html5 und eingenen js und css dateien? :D
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

Timon L.

Anfänger

  • »Timon L.« ist der Autor dieses Themas

Beiträge: 45

Registrierungsdatum: 12.08.2012

Wohnort: GM

Danksagungen: 9

  • Private Nachricht senden

3

16.04.2013, 21:40

Deshalb hab ichs ja auskommentiert :P

Wie genau meinst du das? Soll ich das einsetzen oder hier meine posten? Für den Fall: Ich habe nur die index.html und die style.css, und die wird ja eigentlich für das Problem nicht benötigt.

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

4

16.04.2013, 21:57

nein ich meinete dass du das benutzen sollst, weil so komische sachen (wie style-attrs) in der html datei stehen ;D und xhtml und html einsetzen, ja :D
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

Timon L.

Anfänger

  • »Timon L.« ist der Autor dieses Themas

Beiträge: 45

Registrierungsdatum: 12.08.2012

Wohnort: GM

Danksagungen: 9

  • Private Nachricht senden

5

17.04.2013, 16:37

Ich bin wegen Javascript und CSS noch am überlegen, weil ich entweder die Seite mitliefern will, dann werde ich das natürlich alles schön ausgliedern, aber evtl will ich den Code einfach vor dem Start generieren lassen, damit die Anwendung portabel ist... ich bin mir noch nicht vollkommen sicher. Der bisherige Website-Code ist eh das Ergebnis von ca 20 Minuten, ich werde das natürlich noch stark verbessern, aber erstmal will ich das Grundgerüst, und damit vor allem das Speichern, erledigt haben.

Ähnliche Themen

Verwendete Tags

C++, javascript, qt