Workflow zwischen den Projekten von Qt und Visual Studio
-
Hallo,
bin ein Neuling was GUI -Entwicklung und C++ angeht und habe eine grundlegende Frage.
Ich möchte mit Qt eine GUI für mein C++ - Programm erstellen. In den Artikeln und Videos die ich gesehen habe wird für die GUI immer eine eigenes Projekt in Qt erstellt und die Oberfläche im Creator erstellt. Im Anschluss wird die benötigte Programmlogik in das Qt Projekt übernommen.
Meine Frage: Gibt es noch eine andere Möglichkeit, vor allem um redundanten Code zu vermeiden? Mir erscheint dieser ganze Workflow ein wenig umständlich.Grüße
-
@makopo sagte in Workflow zwischen den Projekten von Qt und Visual Studio:
In den Artikeln und Videos die ich gesehen habe wird für die GUI immer eine eigenes Projekt in Qt erstellt und die Oberfläche im Creator erstellt. Im Anschluss wird die benötigte Programmlogik in das Qt Projekt übernommen.
Versteh nicht, was du meinst.
Man braucht keinen redundanten Code.
-
Bei Qt gibt es zwei verschiedene Projektarten, um GUIs zu erstellen:
- klassisch mit
QWidgets
(s. z.B. Qt for Beginners) - Qt Quick mit QML (Qt meta/modeling language) - benötigt Qt Creator als IDE.
Wahrscheinlich hast du Artikel und Videos zu dem neueren (aber nicht unbedingt besseren ;- ) Qt Quick (QML) gesehen.
Für Visual Studio gibt es die "Qt Visual Studio Tools"-Extension, s. Qt VS Tools Manual: Getting Started.
- klassisch mit
-
@Mechanics sagte in [Workflow zwischen den Projekten von Qt und Visual Studio](/forum
Versteh nicht, was du meinst.
Man braucht keinen redundanten Code.Also in den z.B. Videos die ich gesehen hatte, wurden alle für das Programm wichtige Funktionen aus der Programmlogik in das Qt-Projekt dupliziert und dann um den Code für die grafischen Elemente ergänzt. Ist also nicht ganz redundant.
Dann werde ich mich mal weiter einlesen (vor allem in QWidgets). Danke.
-
Ist ja auch richtig so, Programmlogik und UI sollten in getrennten Klassen implementiert werden (Stichwort: (Drei-)Schichten-Architektur).
Edit: Es wurden hoffentlich nur die Aufrufe der Logikfunktionen in den UI-Code übernommen - und nicht der gesamte Code!?!
Ansonsten zeige mal die Links dazu.
-
@Th69 sagte in Workflow zwischen den Projekten von Qt und Visual Studio:
Ist ja auch richtig so, Programmlogik und UI sollten in getrennten Klassen implementiert werden (Stichwort: (Drei-)Schichten-Architektur).
Edit: Es wurden hoffentlich nur die Aufrufe der Logikfunktionen in den UI-Code übernommen - und nicht der gesamte Code!?!
Ansonsten zeige mal die Links dazu.Habe das in einem Video bei udemy gesehen. Teilen wird da schwierig.
Die Headerdatei und die Funktionsdefinitionen werden komplett in das Qt Projekt übernommen. Die Definitionen werden dann allerdings um Teil umgeschrieben und an Qt angepasst. Das "Problem" an dem Beispielprogramm im Video ist, dass das Programm so klein ist das View und Model nicht getrennt werden.Ich habe es jetzt so gelöst, das ich in VS einen Ordner für die View habe und dort über die Qt VS Extension das Projekt importiert habe. So kann ich den Code auch in VS schreiben, aber wenn nötig auch den Creator öffnen.
-
Wichtig ist, daß du wenigstens gelernt hat, wie man es richtig macht. Ich frage mich nur, wofür dann solche Schulungsvideos sind...?
-
Hallo @makopo
Ich habe das Qt-Geraffel in Visual-Studio eingebaut und rufe die einzelnen Tools direkt, durch Doppelklick aus der VS-IDE auf.Die einzelnen Dateien, welche mit einem Qt-Tool bearbeitet werden müssen, habe ich diverse 'Filter' (sind die Verzeichnisse in den Projekten) gelegt.
Ich nutze VS2019 Com.; hier meine Einstellungen (habe ein deutsches VS).Die Dialog-Dateien (*.ui), welche der Qt-Designer haben folgende 'Eigenschaften:
"Öffnen mit…" -> Qt-Designer als Standard auswählen
"Eigenschaften/Benutzerdefiniertes Buildtool/Befehlszeile" -> $(QTDIR)/msvc2019_64/bin/uic.exe "%(fullpath)" -o ui_%(filename).h
"Eigenschaften/Benutzerdefiniertes Buildtool/Beschreibung" -> Compile QT UserInterface File (%(Filename).ui)
"Eigenschaften/Benutzerdefiniertes Buildtool/Ausgabe" -> ui_%(filename).hDie MOC-Dateien (*.h) die das Macro 'Q_OBJECT' beinhalten haben folgende 'Eigenschaften:
"Eigenschaften/Benutzerdefiniertes Buildtool/Befehlszeile" -> $(QTDIR)/msvc2019_64/bin/moc.exe "%(FullPath)" -o "moc_%(Filename).cpp"
"Eigenschaften/Benutzerdefiniertes Buildtool/Beschreibung" -> Performing moc on %(Filename).h
"Eigenschaften/Benutzerdefiniertes Buildtool/Ausgabe" -> moc_%(Filename).cppDie erstellten Quelldateien musst Du noch in Dein Projekt übernehmen. Mit diesen Einstellungen fängt der Dateiname mit "moc_" an.
Wenn Du mehrsprachig entwickeln willst, bietet sich noch an, auch die PRO- und resultierende TS-Dateien in einzelne 'Filter' zu legen.
Die PRO-Dateien (*.pro) die die zu übersetzenden Dateien beinhalten haben folgende 'Eigenschaften:
"Eigenschaften/Benutzerdefiniertes Buildtool/Befehlszeile" -> $(QTDIR)/msvc2019_64/bin/lupdate.exe -verbose "%(fullpath)"
"Eigenschaften/Benutzerdefiniertes Buildtool/Beschreibung" -> Update QT Linguist File (%(Filename).pro)
"Eigenschaften/Benutzerdefiniertes Buildtool/Ausgabe" -> %(filename).tsDie resultierenden TS-Dateien (*.ts) lege ich in einen eigenen Filter und lasse diese vom Qt-Linguist als Standard öffnen.
Zusätzlich kann man sich noch den Qt-Assistent in das Menü "Extras" einbinden.
Fürs debugen schau dir mal https://wiki.qt.io/IDE_Debug_Helpers an
-
Hallo @Helmut-Jakoby,
welchen Zweck erfüllen deine Einstellungen und warum kann ich es nicht bei den Voreinstellungen belassen?
Grüße
-
Hi @makopo,
Es vereinfacht einfach das Arbeiten, wenn ich direkt aus der Visual-Studio IDE die einzelnen Qt-Tools durch Doppelklick oder durch einen Kompilierungslauf aktiviere.Ich müsste ansonsten für die Dialogdateien "(QTDIR)/msvc2019_64/bin/uic.exe", für die Header mit dem Makro "Q_OBJECT" "(QTDIR)/msvc2019_64/bin/moc.exe" und für das Erstellen der Übersetzungsdateien "$(QTDIR)/msvc2019_64/bin/lupdate.exe" manuell aufrufen, wenn ich nur Visual-Studio nutzen möchte.
Für die Fehlersuche (debug) mit der Visual-Studio IDE finde ich es unabdingbar, die einzelnen Qt-Container und anderen Qt-Typen wie QString untersuchen zu können.
PS. Ich habe die Qt Visual Studio Tools nicht genutzt! Ich weiß also nicht, was die so leisten.
-
@makopo
grad fuer Neueinsteiger isses bissi "schwierig" mit Qt, eben wegen den etwas komplexeren build workflows.
und das wissen über build chains und tooling und so ist noch nicht so ausgeprägt.Meistens verlässt man sich auf tools .... wegen dem Komfort.
- QtCreator (hab selber nie extensiv genutzt) bringt wohl qt bezogen das komfortabelste Arbeiten ...
- Visual Studio + QT tools geht auch, ab und an hakt es mal bissi .... hab lange nicht mehr mit gearbeitet, in meinen letzten versionen haben die aber auf qmake und .pro Files aufgebaut (machen die nutzung von qmake transparent)
- für Fortgeschrittene und die flexibelste Lösung ist sicher die nutzung von Buildgenerator(en) (cmake, qmake z.b.) erfordert aber auch Einarbeitung
- ganz hartgesottene pflegen ihre Makefiles per hand ... oder ihre Solution files Oder schreibt selber scripte, die die dinger modifizieren ...
Früher oder später, wenn weiter bei c++ bleibst, wirst wahrscheinlich bei den buildgeneratoren landen. Wissen über compile und link internas wirst eh irgendwann mal brauchen. Und vielleicht auch mal mit anderen Projekten zu tun bekommen, und mit leuten zusammen arbeiten, die VS nicht unbedingt wollen, oder mal was auf linux machen .... (Vorteil ist das man mehrere IDE's / Tools unterstützt)
Ich arbeite viel mit Visual Studio und auch Qt .... hab aber sicher seit über 10 Jahren kein Projekt mehr über ein Visual Studio Projekt / Solution verwaltet ....
-
"schwierig" ist gut. Mit Builds habe ich mich noch gar nicht beschäftigt. Das werde ich aber wohl jetzt tun müssen, denn wenn ich das Qt-Projekt in VS kompiliere erhalte ich über 200 Fehler (angeblich fehlende Header-Dateien in der Q-Bibliothek).
Die Hinweise von @Helmut-Jakoby haben die Fehler aber schon mal um weitere 200 reduziert
-
Hallo @makopo,
hier noch einige Hinweise, wie ich Qt Projekte in VS einstelle ($QTDIR verweist bei mir auf das QT-Installationsverzeichnis, ich nutze in diesem Fall Qt 5.15.2):
Rechten Mausklick auf das Projekt -> (ganz unten) Eigenschaften.
Beispielhaft für die Konfiguration [Debug], Plattform: [x64]:C/C++/Allgemein -> Zusätzliche Includeverzeichnisse: Dort trage ich alle Verzeichnisse meiner genutzten Header und $(QTDIR)\msvc2019_64\include ein.
C/C++/Sprache -> C++ Sprachstandard: ISO C++17-Standard (/std:c++17) auswählen.
Linker/Allgemein -> Zusätzliche Bibliotheksverzeichnisse: $(QTDIR)/msvc2019_64/lib
Linker/Eingabe -> Zusätzliche Abhängigkeiten: qtmaind.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5Svgd.lib;Qt5Widgetsd.lib
Wenn [Release] konfiguriert werden soll, lass einfach das jeweilige "d" am Ende im Namen weg; Qt5Cored.lib -> Qt5Core.lib.Linker/System -> SubSystem: ++Windows (/SUBSYSTEM:WINDOWS) auswählen.
BTW; wenn ich ein Qt-Projekt in VS erstelle, dann immer ein „Leeres Projekt“.
Hoffe dass Dir das weiterhilft.