Qt applikationen ohne konsole erstellen...

Alles rund um die Programmierung mit Qt
biba butzelmann
Beiträge: 6
Registriert: 12. Oktober 2006 16:18

Qt applikationen ohne konsole erstellen...

Beitrag von biba butzelmann »

Hi,

bin gerade dabei mich in Qt und C++ einzuarbeiten und habe Qt 4.2 auch soweit mit Visual Studio 2005 (und dieser anleitung: http://mm-werkstatt.informatik.uni-augs ... qt2005.pdf) zum laufen bekommen. Wenn ich allerdings nach diesem Tutorial vorgehe öffnet sich nach dem Kompilieren immer auch ein Konsolenfenster neben der eigentlichen QT-Oberfläche. Wie kann ich das verhindern/unterdrücken? Welche Projekteinstellungen muss ich vornehmen? Muss ich in den Projekteinstellungen Win32-Anwendung anstatt Konsolenanwendung auswählen? Wenn ja (bin halt noch C++ UND QT - NOOB :? ) wie müsste dann der Quellcode dieses mini-progs dafür verändert werden?

Code: Alles auswählen

#include <QApplication>
#include <QLabel>
 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     QLabel *label = new QLabel("Hello Qt!");
     label->show();
     return app.exec();
 }


P.S: mag sein, dass die Fragen doof sind, bin aber trotzdem für jede Antwort dankbar... :wink:

[/code]
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Das macht der DEFINES += console Paramter, einfach aus der pro Datei werfen.
biba butzelmann
Beiträge: 6
Registriert: 12. Oktober 2006 16:18

Beitrag von biba butzelmann »

danke schonmal für die schnelle antwort die aber leider mein problem nicht löst :cry: . Ich entwickel alles in VS und habe daher nur "*.vcproj" dateien in welchen es diese Einstellung nicht gibt.
Bin mittlerweile zwar unter den Projekteinstellungen (Alt+F7 -> Linker -> System -> Subsystem) auf Einstellungsmöglichkeiten gestoßen (Subsystem = Konsole, Windows,....) aber je nach Einstellung bleibt entweder das Problem bestehen oder das Projekt lässt sich nicht mehr kompilieren. Bei Subsystem = windows kommt folgender Fehler:

Code: Alles auswählen

MSVCRT.lib(crtexew.obj): error LNK2001: Nicht aufgelöstes externes Symbol "_WinMain@16"
irgendwer noch eine idee?
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

Wie erstellst du denn deine "*.vcproj", ich denke mal mit qmake -t vcapp. Dann musst du immer noch den DEFINES += console Paramter in deiner pro entfernen, dann sollte es auch funktionieren.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Whitefurrows hat geschrieben:Wie erstellst du denn deine "*.vcproj", ich denke mal mit qmake -t vcapp.
Und selbst wenn er nur ein .vcproj verwendet sollte man diese Option in den Linker-Systemeinstellungen finden... aber was das mit Qt zu tun haben soll keine Ahnung.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
sWeeR
Beiträge: 10
Registriert: 15. Oktober 2006 17:17

Beitrag von sWeeR »

Hallo, also ich habs jetzt so hinbekommen (ist allerdings sehr unschön aber ich hab auch keine ahnung :) )

hab auch alles wie in dem qt2005.pdf tutorial gemacht.

#include <windows.h> // für die parameter der winmain

int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow) // statt der int main (...)
{
int argc;
char *argv [256];

// create a new instance of QApplication with params argc and argv
QApplication app( argc, argv );

// ... etc ....
}

die winmain hatte bei dir gefehlt. das subsystem ist windows.
hab das programm nur zum laufen gebracht, indem ich argv eine feste grösse gegeben hab.

naja hauptsache die hässliche konsole ist weg ...

gruß sweer
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Was soll denn bitteschön WinMain() dort?? Der Entrypoint heisst noch immer main() wenn man mit Qt programmiert.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Mister_Crac
Beiträge: 28
Registriert: 10. August 2006 12:17

Beitrag von Mister_Crac »

Christian81 hat geschrieben:Was soll denn bitteschön WinMain() dort?? Der Entrypoint heisst noch immer main() wenn man mit Qt programmiert.
Deine Antwort ist nicht hilfreich. Er sagt doch, dass er sich nicht auskennt.

Zusammenfassung: Gesucht ist eine Möglichkeit, wie man mit Visual Studio (der Open Source Version, nehme ich mal stark an) eine Anwendung so erstellt, dass dabei kein Konsolenfenster aufgeht. Dies kann man erreichen, indem man als Projekt eine Windows-Applikation erstellt. Aber dann hat man eben diesen Windows-typischen Entrypoint, denn man unter Qt eigentlich nicht haben will.
Also, was ist nun eine echte Lösung für dieses Problem?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Mister_Crac hat geschrieben: Also, was ist nun eine echte Lösung für dieses Problem?
Qt: http://doc.trolltech.com/3.3/qmake-manual-8.html#CONFIG (schon ein paarmal hier im Forum)
Und wenn man kein qmake verwenden will (warum man das als Anfänger auch immer tun sollte) gibt es die Einstellung, welche durch den qmake-Schalter umgesetzt wird, in den Linkereinstellungen... aber selbst das habe ich schonmal gesagt.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
biba butzelmann
Beiträge: 6
Registriert: 12. Oktober 2006 16:18

Beitrag von biba butzelmann »

jo, super, danke sWeeR. sieht zwar etwas unschön aus aber funzt einwandfrei... :D
Bert
Beiträge: 2
Registriert: 5. Dezember 2006 12:35

Beitrag von Bert »

Hi könntest du vielleicht genau beschreiben, wie du das Problem gelöst hast? Habe nämlich genau die gleichen Problme, wie du sie gehabt hast. Hatte auch die Fehlermeldung:

Code: Alles auswählen

MSVCRT.lib(crtexew.obj): error LNK2001: Nicht aufgelöstes externes Symbol "_WinMain@16"
Ich komme aber einfach nicht weiter.

Vielen Dank

Bert
sWeeR
Beiträge: 10
Registriert: 15. Oktober 2006 17:17

Beitrag von sWeeR »

hallo, ich würde dir auf jeden fall abraten, das so zu machen !
nimm lieber das mingw packet und stell dein VS auf den mingw compiler ein, ist praktisch kein unterschied.

dir hilft es, wenn du im quelltext statt int main (int ... , ...) das schreibst was ich weiter oben gepostet hab.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

sWeeR hat geschrieben: dir hilft es, wenn du im quelltext statt int main (int ... , ...) das schreibst was ich weiter oben gepostet hab.
Was total falsch ist (und ausserdem unter Linux nicht geht). Nimm qmake - dort wird die richtige Lib (qtmain(d).lib) hinzugelinkt und alles ist ok.

Und bevor Du hier rumschreist nein es geht bei mir - funktionieren wrd es wohl, aber deine Qt-Application wird dadurch nicht korrekt initialisiert.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
sWeeR
Beiträge: 10
Registriert: 15. Oktober 2006 17:17

Beitrag von sWeeR »

ich schreibe ja er soll es so nicht machen

ausserdem ist sein fehler, dass die winmain nicht vorhanden ist, er will ja also unter windows programmieren.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

sWeeR hat geschrieben:ausserdem ist sein fehler, dass die winmain nicht vorhanden ist, er will ja also unter windows programmieren.
Die WinMain ist nicht vorhanden da qtmain(d) nicht gelinkt wird und nicht weil er unter Windows programmiert. Das steht in dem pdf nicht und wie ich schon sagte macht es qmake korrekt.
In der WinMain von Qt wird nämlich noch einiges initialisiert -> Kannst Dir ja mal qt-4/src/tool/qtmain_win.cpp anschauen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten