DLL z GUI - jakiej biblioteki użyć

DLL z GUI - jakiej biblioteki użyć
DA
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:52
0

Cześć spotkałem się ostatnio z przykrym problemem. Otóż Mam do napisania wtyczkę do IDE (Keil), która ma symulować pewne urządzenie. Sam do pisania jakichkolwiek GUI zawsze używałem Qt i chciałem DLLkę napisać przy jego zastosowaniu również. Odpowiedź z support'u na pytanie jak się ma Qt do ich Keila brzmiało tak, że oni wspierają jedynie MFC, ale z Qt nie powinienem mieć problemu. Problem jednak jest i to spory. Niestety muszę napisać cały widok od nowa, bo w Qt nie da się zrobić iteraktywnego GUI do dll ze względu na ograniczenie wynikające z istnienia klasy QApplication oraz pętli zdarzeń (przynajmniej nie da się tego zrobić łatwo i ładnie).

 Stąd pytanie, czy ktoś kiedyś pisał DLL z interfejsem graficznym i jakiej biblioteki graficznej mogę użyć do tego? MFC i WinAPI wolałbym nie używać, ponieważ osobiście mi się nie podobają. Biblioteka powinna być dość elastyczna - najlepiej zorientowana obiektowo oraz pozwalająca na tworzenie własnych widgetów (rysowanie pędzlem + wypełnianie kształtów).

Z góry dziękuję za pomoc. Oczywiście bibliotek jest sporo do wykorzystania, ale tym razem zależy mi, żeby ktoś potwierdził jej użyteczność w zastosowaniu do pisania bibliotek współdzielonych.

Pozdrawiam :)

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 5 godzin
2

Problem jednak jest i to spory. Niestety muszę napisać cały widok od nowa, bo w Qt nie da się zrobić iteraktywnego GUI do dll ze względu na ograniczenie wynikające z istnienia klasy QApplication oraz pętli zdarzeń (przynajmniej nie da się tego zrobić łatwo i ładnie).

Ale problem z pętlą komunikatów nie jest specyficzny dla Qt więc tak czy siak będziesz go musiał jakoś rozwiązać.

DA
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:52
0

Nie wiem dokładnie jak to wygląda w innych frameworkach, ale największy problem z pętlą zdarzeń w Qt jest wymóg, że musi działać w głównym wątku. Po przeniesieniu do innego wątku odpalane GUI po prostu nie reaguje na akcje użytkownika. Jeżeli podobnie jest w innych frameworkach, to faktycznie będę musiał pisać w MFC.

Zobacz pozostałe 2 komentarze
06
Widocznie Qt nie nadaje się do pisania GUI dla wtyczek (z wxWidgets jest podobnie).
DA
Więc zostało MFC. trudno. Wielkie dzięki 0x666 :)
06
Tak sobie pomyślałem, że jeśli to ma być dialog (modalny lub nie), to może jakoś dałoby się to zrobić w wx'ach. Trza pokombinować...
Azarien
ale skąd Qt w ogóle wie który wątek jest główny a który jest niegłówny?
DA
@Azarien szczerze mówiąc nie wiem dokładnie skąd to wie i jak to jest zaimplementowane, ale http://doc.qt.io/qt-5/threads-qobject.html mówi, że w oddzielnych wątkach można mieć tylko non-GUI QObjects, a jeśli odpalę np. QApplication w wątku nie-głównym, to na wyjściu błędów pojawia mi się ostrzeżenie o moich niecnych planach. Nie wiem skąd wie... ale wie.
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

Spróbuj zrobić tak:

  • aplikacja (Keil) -> DLL wtyczki -> proces potomny GUI / Qt

Z Qt na pewno się da tylko trzeba pokombinować. Najwięcej roboty będziesz miał tu z komunikacją IPC między DLL a procesem potomnym, zajrzyj tutaj:

IPC
http://doc.qt.io/qt-5/ipc.html
http://doc.qt.io/qt-4.8/examples-ipc.html
http://www.slideshare.net/mariusbu/ipc-with-qt

Ukrycie ikonki aplikacji
http://stackoverflow.com/questions/4055506/qt-hide-taskbar-item

edytowany 1x, ostatnio: vpiotr
DA
Super pomysł. Na pewno spróbuję to zrobić :)
DA
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:52
1

Udało mi się rozwiązać problem :) Dla wszystkich osób, które będą chciały kiedyś z tego skorzystać. wywalilem GUI do oddzielnego wątku, ale używając klasy std::thread zamiast QThread z biblioteki Qt :) Pozdrawiam i dzięki za pomoc i pomysły :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.