2009-11-13 14 views
49

Znalazłem sprzeczne odpowiedzi w Internecie - niektórzy twierdzą, że tak, niektórzy twierdzą, że tak nie jest. Nie mogłem też znaleźć żadnych szczegółów w oficjalnej dokumentacji Qt. Czy Qt ma powiązania C, czy też nie?Czy Qt ma interfejs C?

Odpowiedz

49

Krótka odpowiedź: nie.

Jeśli potrzebujesz wszechstronnego zestawu narzędzi GUI dla języka C, możesz użyć GTK +.

Aby używać Qt, musisz musi mieć mieć kompilator C++. Ale to nie znaczy, że twoja "logika aplikacji" nie może być napisana w C, skompilowana z kompilatorem C i starannie połączona z częścią C++ (GUI z Qt). Ta logika aplikacji może być ogólna, możliwa do połączenia z innymi plikami wykonywalnymi (pure-C, mixed C/C++, itd.) Wszystko zależy od tego, czego potrzebujesz.

Qt jest dobre dla C++, choć i to jest dobry powód, aby zdecydować, używając C++ dla danego projektu, nawet jeśli nadal chcesz zachować części w C.

3

Nie sądzę, że tak. Qt jest zawsze opisywany jako "biblioteka klas" i wymaga kompilatorów C++ do zbudowania. Możesz spróbować napisać/znaleźć DLL/interfejs, który będzie owijać wokół QT i dostarczać API do warstwy C.

15

Nr Qt to C++. Ale możesz napisać wszędzie kod w stylu C, który nie współdziała/tworzy elementy GUI i kompiluje całość z wybranym kompilatorem C++.

10

Kiedyś wiążącej nazywa QTc, ale szukają dla niego ujawnia this thread:

Od Richard Dale:

kiedyś utrzymać powiązania C, które zostały wykorzystane przez Objective-C i Qt # wiązań. Ale biblioteka Smoke jest znacznie lepsza, chociaż nie jest wiązaniem C, a I odrzuciła wiązania QtC, aby użyć dymu.

Smoke is here. Nie udało mi się znaleźć wyraźnego odniesienia do wiązań QtC w dowolnym miejscu, choć pamiętam o nich.

3

Zawsze możesz użyć kompilatora C++, które po prostu przekłada C++ do C, a następnie wywołać zniekształcone nazwy to generuje, itd :-)

+0

... zły pomysł: kiedy będziesz pracować z innym kompilatorem, może się okazać, że nazwa "mangling" jest inna. A może jest gwiezdny głód? – Dacav

+1

Jeśli po prostu "skompilujesz" kod C++ (Qt) do C, od tego momentu możesz po prostu traktować wygenerowany kod C jako "źródło". Jeśli nie wrócisz, aby go zregenerować, kompilator użyty do wygenerowania go nie ma już znaczenia. To powiedziawszy, ta odpowiedź nie powinna być traktowana zbyt poważnie, ale uważam, że jest to jednak poprawna odpowiedź. –

+0

Po co używać zniekształconych nazw? Każdy rozsądny kompilator C++ powinien rozumieć instrukcję "extern" C "', szczególnie gdy kompiluje się do źródła C. (Btw, który kompilator C++ może emitować kod C?) – schoppenhauer

17

Niestety nie, ale można kształtować swój program jako zestaw bibliotek achiving swoje logiki biznesowej i zapisz je w C, możesz użyć małego C++ do wiązania tego, co napisałeś jako bibliotekę z GUI używając QT.

Jest to dobre podejście również dlatego, że później można ponownie użyć biblioteki i wdrożyć wiele innych front-endów z różnymi zestawami narzędzi lub językami!

-1

Qt używa kompilatora Meta Object (MOC), aby magiczne działanie sygnału i szczeliny działało (na przykład wywoływanie wywołań funkcji na podstawie sygnału użytkownika i definicji szczeliny). Tak więc Qt nie jest plikiem wykonawczym C++, ale jest to naprawdę własna składnia Qt, która jest podobna do C++, ale z sygnałami i gniazdami. To sprawia, że ​​"zewnętrzny" c "" jest bezużyteczny.