我一直在Linux下玩Qt Creator 4.5。我的应用程序在Linux下构建得很好,但如果我在Windows中构建,应用程序总是会在启动时打开一个控制台窗口。
我可以阻止它吗?
我正在使用默认的MinGW设置构建,也许这是相关的。如果需要,我可以使用Visual Studio构建,但我想先了解发生了什么......
编辑:我刚刚在Windows下使用Qt Creator创建了一个简单的测试GUI应用程序,但它没有出现此行为。由于在linux下创建项目的方式,或者我的应用程序执行了导致控制台窗口出现的内容,因此发生了此行为。我会在诊断时发布详细信息,以防其他人帮助。
答案 0 :(得分:17)
简短的回答是,包括Qt testlib导致控制台出现。删除它会让它消失。
进一步解释,如果.pro文件将testlib添加到QT,例如
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和rebuild的引用,我们会得到一个像这样的链接步骤
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,没有更多的控制台窗口。
答案 1 :(得分:9)
我认为这不是这个特定答案的解决方案(除了它是4年后), 但我认为很多人登陆这个主题都会寻找这个设置:
项目>构建并运行>运行设置>运行> [x]在终端中运行
取消选择它并从QtCreator运行GUI而无需额外的终端窗口。然后,终端输出将嵌入IDE中。
答案 2 :(得分:8)
您需要确保提供-mwindows开关。
修改强>
或者,您可以进入makefile并将其添加到链接器标志:
-Wl,-subsystem,windows
答案 3 :(得分:5)
对于那些使用CMake有此问题的人,我找到了真正的解决方案here。由我自己验证。
简而言之,您需要在WIN32
语句中添加add_executable()
:
add_executable(GuiApplication WIN32 src/main.cpp)
答案 4 :(得分:4)
确保您的.pro文件未将console
添加到变量CONFIG
。您可以通过添加
CONFIG -= console
.pro文件末尾的某个地方。如果CONFIG
包含console
,则每次启动程序时都会弹出一个窗口,打印调试输出时也会使用此窗口。因此,在调试程序时添加console
会很有用。否则,您需要使用DebugView等工具来显示qDebug()
来电的输出。
答案 5 :(得分:3)
听起来像是为控制台应用设置了链接器设置。您可以尝试将链接器设置为使用/ subsystem:windows选项。控制台应用程序的选项是/ subsystem:console。如果在Visual Studio中构建项目,请创建Win32项目。不要创建Win32控制台应用程序。 Visual Studio中用于设置子系统的选项位于Project Settings-> Linker-> System-> SubSystem下。选择Windows(/ subsystem:windows)。
我看了一下如何用MinGW / gcc做这个。 gcc的在线文档显示了Windows目标的不同选项。像其他人所说,您正在寻找的选项是-mwindows。选项-mwindows创建一个窗口应用程序。您的当前设置似乎是-mconsole。选项-mconsole会生成一个控制台应用程序。这是一个链接器选项。我不熟悉Qt Creator,但我猜它有类似的方式来查看像Visual Studio这样的项目设置。
答案 6 :(得分:3)
我使用cmake而不是qmake。我用过set(CMAKE_CXX_FLAGS“-mwindows”) 似乎好像 QMAKE_CXXFLAGS + = - mwindows 在您的.pro文件中也会这样做。
答案 7 :(得分:1)
转到:Projects --> Run
并取消选中Run in terminal
复选框
答案 8 :(得分:0)
默认情况下,链接器假定您需要控制台应用程序。
修复是将“-mwindows”添加到编译器的参数列表中,这也将无形地添加所需的库(-lkernel32,-lgdi32等)。你可能需要从main()更改为WinMain()作为入口点。
RE:您的编辑: Qt构建系统使用“spec”文件添加变量,您可以在$ QTDIR / qt / mkspecs中找到它们。当您在QCreator中创建新的Windows应用程序时,它会将默认规范设置为“win32-g ++”,它会自动设置正确的变量(Windows应用程序,链接器标志等)。
当您在Linux下创建项目时,它使用了另一个规范,这导致了您的问题。您可以在“yourproject.pro.user”文件中查看当前规范。
答案 9 :(得分:0)
QT / 2009.05 / QT / mkspecs / Win32的克++
编辑文件qmake.conf
修改行
QMAKE_LFLAGS_CONSOLE = -Wl,-subsyetem,console
到
QMAKE_LFLAGS_CONSOLE = -Wl,-subsyetem,windows
并修改你的???。pro文件(例如添加新行或空格)
和编译
它工作正常