لماذا يقوم تطبيق QT 4.5 بتفتح نافذة وحدة التحكم تحت Windows؟

StackOverflow https://stackoverflow.com/questions/760323

سؤال

لقد كنت ألعب مع Creator QT 4.5 تحت Linux. يبني التطبيق الخاص بي على ما يرام فقط تحت Linux، ولكن إذا قمت ببناء Windows، فإن التطبيق يفتح دائما نافذة وحدة التحكم عند بدء التشغيل.

هل يمكنني إيقافه بذلك؟

أنا أبني باستخدام إعداد MINGW الافتراضي، ربما مرتبط. إذا لزم الأمر، يمكنني البناء مع Visual Studio، ولكن أود أن أفهم ما يحدث أولا ...

يحرر: لقد أنشأت للتو تطبيق اختبار GUI بسيط مع Creator QT تحت Windows ولم يظهر هذا السلوك. قد حدث هذا السلوك بسبب الطريقة التي تم إنشاؤها بها المشروع تحت Linux، أو هناك شيء يقوم به تطبيقي الذي يؤدي إلى ظهور نافذة وحدة التحكم. سيتم نشر التفاصيل عندما قمت بتشخيصه في حالة مساعدة شخص آخر.

هل كانت مفيدة؟

المحلول

الجواب القصير هو أنه بما في ذلك Testlib QT يؤدي إلى ظهور وحدة التحكم. إزالة ذلك يجعلها تذهب بعيدا.

لشرح المزيد، إذا كان ملف .pro الخاص بك يضيف testlib إلى كيو تي، على سبيل المثال

QT += sql \
    webkit \
    network \
    testlib

ثم يتم تنفيذ خطوة الارتباط النهائي مع خط مثل هذا

g++ -enable-stdcall-fixup 
   -Wl,-enable-auto-import 
   -Wl,-enable-runtime-pseudo-reloc 
   -mthreads 
   -Wl 
   -Wl,-subsystem,console 
   -o debug\MyApp.exe object_script.MyApp.Debug  
   -L"c:\Qt\2009.01\qt\lib"  
   -lglu32 -lgdi32 -luser32 -lQtWebKitd4 -lQtTestd4 
   -lQtSqld4 -lQtGuid4 -lQtNetworkd4 -lQtCored

لقد انتهيت باستخدام النظام الفرعي وحدة التحكم! أفترض استخدام قوات Testlib أن يحدث هذا بحيث يكون إخراج الاختبار في مكان ما للذهاب إليه.

إذا عدنا الآن ملف .pro وإزالة المرجع إلى Testlib وإعادة البناء، نحصل على خطوة رابط مثل هذا

g++ -enable-stdcall-fixup 
   -Wl,-enable-auto-import 
   -Wl,-enable-runtime-pseudo-reloc 
   -mthreads 
   -Wl 
   -Wl,-subsystem,windows 
   -o debug\Ammotin.exe object_script.Ammotin.Debug  
   -L"c:\Qt\2009.01\qt\lib" 
   -lglu32 -lgdi32 -luser32 -lmingw32 -lqtmaind -lQtWebKitd4 
   -lQtSqld4  -lQtGuid4 -lQtNetworkd4 -lQtCored4

ياي! النظام الفرعي هو Windows، لا مزيد من نافذة وحدة التحكم.

نصائح أخرى

أعتقد أن هذا ليس حلا لهذه الإجابة المحددة (إلى جانب ذلك بعد 4 سنوات)، لكنني أعتقد أن العديد من الأشخاص الهبوط في هذا الموضوع سيبحثون عن هذا الإعداد:

المشاريع> بناء وتشغيل> إعدادات التشغيل> تشغيل> x] تشغيل في المحطة

قم بإلغاء تحديده وتشغيل واجهة المستخدم الرسومية الخاصة بك من QtCreator دون نافذة محطة إضافية. سيتم تضمين إخراج المحطة الطرفية في IDE.

سوف ترغب في التأكد من توفير مفتاح -MWindows.

يحرر:

بدلا من ذلك، يمكنك الدخول في Makefile وإضافة هذا إلى أعلام رابط الخاص بك:

-Wl,-subsystem,windows

بالنسبة لأولئك الذين لديهم هذه المشكلة باستخدام cmake، لقد وجدت الحل الحقيقي هنا. وبعد التحقق من نفسي.

باختصار، تحتاج إلى إضافة WIN32 لك add_executable() صياغات:

add_executable(GuiApplication WIN32 src/main.cpp)

تأكد من عدم إضافة ملف .pro الخاص بك console إلى المتغير CONFIG. وبعد يمكنك القيام بذلك عن طريق إضافة

CONFIG -= console

في مكان ما في نهاية ملف .pro الخاص بك. إذا CONFIG يحتوي على console نافذة ينبثق في كل مرة تبدأ فيها البرنامج، وهذا يستخدم أيضا عند طباعة إخراج التصحيح. وهكذا، إضافة console يمكن أن تكون مفيدة عند تصحيح البرنامج. وإلا فستحتاج إلى استخدام أدوات مثل Debugview. لإظهار إخراج qDebug() المكالمات.

يتم تعيين الأصوات مثل إعدادات الرابط الخاص بك لتطبيق وحدة التحكم. يمكنك تجربة تحديد رابط لاستخدام خيار / نظام Windows: Windows. خيار تطبيقات وحدة التحكم / النظام الفرعي: وحدة التحكم. إذا قمت ببناء مشروعك في Visual Studio، فقم بإنشاء مشروع Win32. لا تنشئ تطبيق وحدة التحكم Win32. يخضع الخيار ضمن Visual Studio لإعداد النظام الفرعي لإعدادات المشروع -> Linker-> System-> النظام الفرعي. حدد Windows (/ النظام الفرعي: Windows).

أخذت نظرة على كيفية القيام بذلك مع mingw / دول مجلس التعاون الخليجي. المستندات عبر الإنترنت ل مجلس التعاون الخليجي يظهر خيارات مختلفة لأهداف Windows. مثل أخرى قد ذكرت، الخيار الذي تبحث عنه هو -mwindows. خيار -MWindows ينشئ تطبيقا نافذة. يبدو أن الإعداد الحالي الخاص بك هو -MConsole. خيار -MConsole ينتج تطبيق وحدة التحكم. هذا خيار روابط. أنا لست على دراية بمبدع QT لكنني أظن أنه يحتوي على طريقة مماثلة لعرض إعدادات المشروع مثل Visual Studio.

أنا استخدم cmake بدلا من qmake. لقد استخدمت مجموعة (cmake_cxx_flags "-mwindows") كما لو كان Qmake_cxxflags + = - mwindows في ملف .pro الخاص بك سوف تفعل الشيء نفسه.

اذهب إلى: Projects --> Run وإلغاء تحديد Run in terminal خانة الاختيار

افتراضيا افتراض الرابط الذي تريد تطبيق وحدة التحكم.

الإصلاح هو إضافة "-mwindows" إلى قائمة وسيطة مترجم المجموعة الخاصة بك، وسوف تضيف هذا أيضا إلى المكتبات المطلوبة (LKERNEL32، -LGDI32، إلخ). ربما تحتاج إلى تغيير من Main () إلى WinMain () كقطة دخول.

إعادة: تعديل الخاص بك: يستخدم نظام إنشاء QT ملفات "المواصفات" لإضافة المتغيرات، يمكنك العثور عليها في Qtdir / QT / MKSPECS. عند إنشاء تطبيق Windows جديد في Qcreator، يقوم بتعيين المواصفات الافتراضية إلى "Win32-g ++"، والتي تحدد تلقائيا المتغيرات الصحيحة (تطبيق Windows، أعلام رابط، إلخ).

عندما صنعت المشروع تحت Linux، استخدم مواصفات أخرى وتسببت في مشكلتك. يمكنك رؤية المواصفات الحالية في ملف "yourproject.pro.user".

كيو تي / 2009.05 / كيو تي / MKSPECS / WIN32-G ++
تحرير الملف Qmake.conf.
تعديل خط
QMAKE_LFLAGS_CONSOLE = -WL، -Subsyetem، وحدة التحكم
ل
QMAKE_LFLAGS_CONSOLE = -WL، -Subsyetem، ويندوز

وتعديل ملف Pro الخاص بك ؟؟.
وتجميع
انها تعمل موافق

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top