2009-11-13 13 views
49

Ich habe widersprüchliche Antworten im Internet gefunden - einige sagen, es tut, manche sagen, es nicht. Ich konnte auch keine Details in der offiziellen Qt-Dokumentation finden. Hat Qt also C-Bindungen oder nicht?Hat Qt eine C-Schnittstelle?

Antwort

49

Kurze Antwort: Nein.

Wenn Sie ein umfassendes GUI-Toolkit für C benötigen, können Sie GTK + verwenden.

Um Qt zu verwenden, müssen Sie einen C++ - Compiler haben. Aber es bedeutet nicht, dass Ihre "Anwendungslogik" nicht in C geschrieben, mit einem C-Compiler kompiliert und sorgfältig mit dem C++ - Teil (der GUI mit Qt) verknüpft werden kann. Diese Anwendungslogik kann generisch sein und in andere ausführbare Dateien (pure-C, gemischtes C/C++ usw.) eingebunden werden. Alles hängt davon ab, was Sie brauchen.

Qt für C++ ist sehr gut, aber, und es ist ein guter Grund, mit C++ für ein bestimmtes Projekt zu entscheiden, auch wenn Sie noch Teile behalten wollen in C.

3

Ich glaube nicht, dass es so ist. Qt wird immer als "Klassenbibliothek" beschrieben und erfordert C++ - Compiler zum Erstellen. Sie könnten versuchen, eine DLL/Schnittstelle zu schreiben/zu finden, die QT umschließt und eine API für eine C-Schicht bereitstellt.

15

Nein. Qt ist C++. Aber Sie könnten einfach überall C-Code schreiben, der nicht mit GUI-Elementen interagiert/erstellt und das Ganze mit Ihrem C++ - Compiler Ihrer Wahl kompiliert.

10

Es verwendet eine Bindung genannt QTC werden, aber für sie die Suche zeigt this thread:

von Richard Dale:

ich verwendete C-Bindungen zu pflegen, die von Objective-C und Qt # Bindungen verwendet wurden. Aber die Rauchbibliothek ist viel besser, obwohl es keine C-Bindung ist, und ich habe die QtC-Bindungen verschrottet, um stattdessen Rauch zu verwenden.

Smoke is here. Ich konnte nirgends eine klare Referenz zu den QtC-Bindungen finden, obwohl ich mich erinnere, von ihnen zu hören.

3

Sie immer einen C++ Compiler, einfach übersetzt C++ zu C, dann rufen Sie die entstellten Namen usw. erzeugt es :-) Leider nicht,

+0

... schlecht Idee: Wenn Sie mit einem anderen Compiler arbeiten, können Sie feststellen, dass der Name Mangling anders ist. Oder gibt es einen Stardard für Mangling? – Dacav

+1

Wenn Sie nur den C++ - Code (Qt) nach C "kompilieren", können Sie von nun an den generierten C-Code als "Quelle" behandeln. Wenn Sie nicht zurückgehen, um es neu zu generieren, ist der Compiler, der es erzeugte, nicht mehr relevant. Allerdings soll diese Antwort nicht zu ernst genommen werden, aber ich glaube, es ist trotzdem eine richtige Antwort. –

+0

Warum verfälschte Namen verwenden? Jeder vernünftige C++ - Compiler sollte die "extern" C "-Anweisung verstehen, besonders wenn er in C-Quelle kompiliert wird. (Btw, welcher C++ - Compiler kann C-Code ausgeben?) – schoppenhauer

17

verwenden könnte, aber Sie können Ihr Programm als Satz von Bibliotheken prägen achiving Ihre Geschäftslogik und schreiben Sie sie in C, dann können Sie ein wenig C++ verwenden, um das, was Sie als Bibliothek geschrieben haben, mit einer GUI zu verbinden, die QT verwendet.

Dies ist ein guter Ansatz auch, weil Sie später Ihre Bibliothek wiederverwenden und viele andere Front-Ends mit verschiedenen Toolkits oder Sprachen implementieren können!

-1

Qt verwendet den Meta-Objekt-Compiler (MOC), um die Signal- und Slot-Zauberarbeit zu leisten (z. B. Funktionsrückrufe basierend auf Benutzersignal- und Slot-Definitionen). Qt ist also kein aktuelles C++, aber es ist wirklich Qt's eigene Syntax, die ähnlich wie C++ ist, aber mit Signalen und Slots. Dies macht 'extern' c '' nutzlos.