2008-08-26 16 views
9

Obecnie utrzymujemy kombinację aplikacji MFC, które są dość dobrze zaprojektowane, jednak interfejs użytkownika zaczyna wyglądać na zmęczonego, a duża część kodu wymaga trochę refaktoryzacji, aby uporządkować niektóre problemy związane z duplikowaniem i/lub wydajnością. Korzystamy z wielu niestandardowych kontrolek, które obsługują wszystkie własne rysunki (wszystkie napisane przy użyciu MFC).Integracja Qt ze starszymi aplikacjami MFC

Ostatnio robiłem więcej badań nad Qt i korzyściami, jakie zapewnia (międzyplatformowe i wspiera to, co można nazwać bardziej "profesjonalnym" wyglądem dla rozwoju interfejsu użytkownika).

Moje pytanie brzmi - jakie byłoby najlepsze podejście do przejścia na system Qt? Czy Qt gra dobrze z MFC? Czy byłoby lepiej rozpocząć przenoszenie niektórych niestandardowych elementów sterujących do Qt i stopniowo integrować coraz więcej w naszych istniejących aplikacjach MFC? (czy to możliwe?).

Wszelkie porady lub wcześniejsze doświadczenia są mile widziane.

Odpowiedz

8

W mojej firmie używamy obecnie Qt i jesteśmy z niego bardzo zadowoleni.

I personnally nigdy musiał przenieść MFC-app w użyciu ramy Qt, ale tutaj jest coś, co może być pewnym zainteresowaniem dla Ciebie:

Qt/MFC Migration Framework

Qt/MFC Migration Framework

To część Qt-Solutions, więc oznacza to, że będziesz musiał kupić licencję Qt wraz z licencją Qt-Solutions. (edit: not any more)

Mam nadzieję, że to pomoże!

2

(To tak naprawdę nie odpowiada na twoje konkretne pytania, ale ...) Nie używałem osobiście Qt, ale nie jest to darmowe dla komercyjnego rozwoju Windows.

Czy spojrzałeś na wxWindows, który jest bezpłatny? Niezły artykuł here. Tak na marginesie, jeśli chciałbyś mieć jedną podstawę kodu dla wszystkich platform, być może będziesz musiał przenieść się z MFC - jestem prawie pewny (ktoś poprawi, jeśli źle), że MFC atakuje tylko Windows.

Inną opcją byłoby przejrzenie Feature Pack update dla MFC w wersji SP1 VS2008 - obejmuje ona dostęp do nowych elementów sterujących, w tym formantów wstążki w stylu pakietu Office.

+1

Qt jest teraz licencjonowany na licencji LGPL (http://www.heise.de/ix/Qt-Toolkit-mit-LGPL-Lizenz--/news/meldung/121584). AFAIK oznacza to, że * jest * bezpłatny do użytku komercyjnego. –

+1

lub w języku angielskim: http://www.qtsoftware.com/about/news/lgpl-license-option-added-to-qt – gbjbaanb

+0

Zawsze było zgodne z prawem do użytku komercyjnego podczas łączenia z bibliotekami dynamicznymi i informowania o tym w aplikacji licencja – killdaclick

0

To trudny problem i podejrzewam, że odpowiedź zależy od tego, ile masz czasu. Otrzymasz znacznie lepszy wynik, jeśli przeniesiesz swoje niestandardowe formanty do Qt - jeśli użyjesz klas QStyle do wykonania rzeczywistego rysunku, to skończy się to tematycznym kodem od razu po wyjęciu z pudełka.

Ogólnie moja rada to ugryźć kulę i przejść całą drogę naraz. Pewnie, może to potrwać dłużej, ale alternatywą jest spędzenie czasu na próbach debugowania kodu, który nie jest w stanie zagrać w piłkę, i kończy się pisaniem większej ilości kodu, aby poradzić sobie z niewielkimi niezgodnościami między tymi dwoma systemami (tam, zrobiono to).

Podsumowując, moja rada polega na założeniu oddziału i wyrwaniu całego starego kodu MFC i zastąpieniu go Qt. Otrzymasz niezależność od platformy (prawie) za darmo, a gdy zajmie to trochę czasu, otrzymasz o wiele lepszy produkt na końcu.

Jedno ostatnie słowo ostrzeżenia: upewnij się, że poświęcasz trochę czasu, aby zrozumieć "sposób działania Qt" - w niektórych przypadkach może to być zupełnie coś innego niż podejście MFC - ostatnia rzecz, którą chcesz zrobić, to zakończyć z kodem Qt w stylu MFC.

0

Poprowadziłem zespół robiący tego rodzaju rzeczy wcześniej (nie MFC do QT, ale zasady powinny działać).

Najpierw udokumentowaliśmy okna dialogowe oraz ich dane wejściowe, kontrolne i wyniki. Ponadto tworzymy kilka przypadków testowych, szczególnie dla każdej sprytnej logiki wewnątrz GUI.

Czasami musieliśmy zmienić pewną logikę biznesową, aby zapewnić przejrzysty interfejs GUI, ale tak powinno być zrobione w pierwszej kolejności tbh.

Teraz mamy listę GUI, wejść, wyjść, testów i interfejs, który musi być dopasowany do enkapsulowanego GUI.

Rozpoczęliśmy projekt od projektu, aby utworzyć ekwiwalentne GUI do starych. Kiedy to zrobiliśmy, możemy umieścić GUI w miejscu, w którym był stary, przebudować go i przetestować. Na początku dużo potknęliśmy, ale wkrótce opracowaliśmy typowe błędy i naprawiliśmy je. Przeprowadziliśmy (jak sądzę) 612 dialogów, chociaż pracowało nad nim kilkunastoosobowy zespół.

Powiązane problemy