2008-08-26 13 views
9

Wir halten derzeit einen Anzug von MFC-Anwendungen, die ziemlich gut gestaltet sind, aber die Benutzeroberfläche beginnt müde und viel der Code ist in der Tat ziemlich ein bisschen Refactoring, um einige aufzuräumen Duplizierungs- und/oder Leistungsprobleme. Wir verwenden einige benutzerdefinierte Steuerelemente, die alle ihre eigenen Zeichnungen verwalten (alles mit MFC geschrieben).Integration von Qt in ältere MFC-Anwendungen

Kürzlich habe ich mehr über Qt und die damit verbundenen Vorteile geforscht (plattformübergreifend und unterstützt, was man als "professioneller" aussehendes Framework für die UI-Entwicklung bezeichnen könnte).

Meine Frage ist - was wäre der beste Ansatz, um vielleicht auf das Qt-Framework zu verschieben? Spielt Qt gut mit MFC? Wäre es besser, einige unserer benutzerdefinierten Steuerelemente auf Qt zu portieren und schrittweise mehr und mehr in unsere bestehenden MFC-Apps zu integrieren? (Ist das möglich?).

Jeder Rat oder vorherige Erfahrung wird geschätzt.

Antwort

8

In meiner Firma verwenden wir derzeit Qt und sind sehr zufrieden damit.

Ich hatte persönlich nie eine MFC-App in mit dem Qt-Framework, zu bewegen, aber hier ist etwas, das für Sie von Interesse sein könnten:

Qt/MFC Migration Framework

Qt/MFC Migration Framework

Es ist Dies bedeutet, dass Sie eine Qt-Lizenz zusammen mit einer Qt-Solutions-Lizenz erwerben müssen. (bearbeiten: not any more)

Ich hoffe, das hilft!

2

(Dies beantwortet nicht wirklich Ihre spezifischen Fragen, aber ...) Ich habe Qt nicht persönlich benutzt, aber es ist nicht frei für kommerzielle Windows-Entwicklung.

Haben Sie sich wxWindows angesehen, die kostenlos ist? Netter Artikel here. Nebenbei bemerkt, wenn Sie eine einzige Codebasis für alle Plattformen benötigen, müssen Sie möglicherweise von MFC migrieren - ich bin mir ziemlich sicher (jemand wird korrigieren, wenn falsch), dass MFC nur Windows anvisiert. Eine andere Option wäre, die Feature Pack update für MFC in SP1 von VS2008 zu betrachten - es enthält Zugriff auf neue Steuerelemente, einschließlich der Ribbon-Steuerelemente im Office-Stil.

+1

Qt ist jetzt LGPL-lizenziert (http://www.heise.de/ix/Qt-Toolkit-mit-LGPL-Lizenz--/news/meldung/121584). AFAIK das bedeutet es ist * frei für kommerzielle Nutzung. –

+1

oder, in Englisch: http://www.qtsoftware.com/about/news/lgpl-license-option-added-to-qt – gbjbaanb

+0

Es war immer legal für kommerzielle Nutzung, wenn es mit dynamischen Bibliotheken verlinkt und darüber in der Anwendung informiert wurde Lizenz – killdaclick

0

Es ist ein kniffliges Problem, und ich vermute, dass die Antwort davon abhängt, wie viel Zeit Sie haben. Sie erhalten ein viel besseres Ergebnis, wenn Sie Ihre benutzerdefinierten Steuerelemente auf Qt portieren. Wenn Sie die QStyle-Klassen für die eigentliche Zeichnung verwenden, erhalten Sie sofort einsatzfähigen Code.

Im Allgemeinen würde mein Ratschlag sein, in den sauren Apfel zu beißen und den ganzen Weg auf einmal zu gehen. Sicher, es könnte länger dauern, aber die Alternative ist, ein Alter zu versuchen, Code zu debuggen, der nicht ziemlich Spielball ist, und am Ende schreibe mehr Code, um mit kleinen Inkompatibilitäten zwischen den zwei Systemen umzugehen (gewesen dort, getan dass).

Also, um es zusammenzufassen, ist mein Rat, eine Verzweigung zu starten und all Ihren alten MFC-Code herauszureißen und ihn durch Qt zu ersetzen. Sie erhalten Plattform-Unabhängigkeit (fast) kostenlos, und obwohl es eine Weile dauern wird, haben Sie am Ende ein viel schöneres Produkt.

Ein abschließendes Wort der Warnung: stellen Sie sicher, dass Sie sich die Zeit nehmen, um die "Qt Art und Weise der Dinge" zu verstehen - in einigen Fällen kann es ganz anders als die MFC-Ansatz sein - das letzte, was Sie tun möchten, ist zu beenden mit MFC-Stil Qt-Code.

0

Ich habe ein Team geführt, das so etwas vorher gemacht hat (nicht MFC zu QT, aber die Prinzipien sollten funktionieren).

Zuerst haben wir die Dialoge und ihre Eingaben, Kontrollen und Ausgaben dokumentiert. Außerdem erstellen wir mehrere Testfälle speziell für jede clevere Logik innerhalb der GUI.

Manchmal mussten wir einige Geschäftslogik umstrukturieren, um eine saubere Schnittstelle die GUIs zur Verfügung zu stellen, aber das ist die Art, wie es in erster Linie tbh getan werden sollte.

Jetzt hatten wir eine Liste von GUIs, Inputs, Outputs, Tests und einer Schnittstelle, die die gekapselte GUI haben musste.

Wir begannen, Projekt für Projekt, äquivalente GUIs zu den alten zu erstellen. Sobald wir das gemacht hatten, konnten wir die GUI dort einfügen, wo die alte war, neu aufbauen und testen. Zuerst haben wir viel gestolpert, aber wir haben bald die üblichen Fehler ausgearbeitet und behoben. Wir navigierten (glaube ich) 612 Dialoge, obwohl ein Team von etwa einem Dutzend von uns daran arbeitete.