Pau*_*xon 31 windows console qt mingw qt-creator
我一直在Linux下玩Qt Creator 4.5.我的应用程序在Linux下构建得很好,但是如果我在Windows中构建,应用程序总是在启动时打开一个控制台窗口.
我可以阻止这样做吗?
我正在使用默认的MinGW设置构建,也许这是相关的.如果需要,我可以使用Visual Studio构建,但我想先了解发生了什么......
编辑:我刚刚在Windows下使用Qt Creator创建了一个简单的测试GUI应用程序,它没有表现出这种行为.由于在linux下创建项目的方式,或者我的应用程序执行了导致控制台窗口出现的内容,因此发生了此行为.我会在诊断时发布详细信息,以防其他人帮助.
Pau*_*xon 17
简短的回答是包括Qt testlib导致控制台出现.删除它会让它消失.
要进一步解释,如果.pro文件将testlib添加到QT,例如
QT += sql \
webkit \
network \
testlib
Run Code Online (Sandbox Code Playgroud)
然后用这样的一行执行最后的链接步骤
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
Run Code Online (Sandbox Code Playgroud)
我们已经使用控制台子系统了!我假设使用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
Run Code Online (Sandbox Code Playgroud)
好极了!子系统是windows,没有更多的控制台窗口.
我认为这不是这个特定答案的解决方案(除了它是4年后),但我认为很多人登陆这个线程将寻找这个设置:
项目>构建并运行>运行设置>运行> [x]在终端中运行
取消选择它并从QtCreator运行GUI而无需额外的终端窗口.然后,终端输出将嵌入IDE中.
您需要确保提供-mwindows开关.
编辑:
或者,您可以进入makefile并将其添加到链接器标志:
-Wl,-subsystem,windows
Run Code Online (Sandbox Code Playgroud)
对于那些使用CMake有这个问题的人,我在这里找到了真正的解决方案.由我自己验证.
简而言之,您需要添加WIN32到您的add_executable()语句中:
add_executable(GuiApplication WIN32 src/main.cpp)
Run Code Online (Sandbox Code Playgroud)
确保您的 .pro 文件不会添加console到变量中CONFIG。您可以通过添加来做到这一点
CONFIG -= console
Run Code Online (Sandbox Code Playgroud)
在 .pro 文件末尾的某个位置。每次启动程序时都会弹出if CONFIGcontainsconsole一个窗口,这也用于打印调试输出。因此,添加console在调试程序时很有用。否则,您需要使用DebugView 之类的工具来显示qDebug()调用的输出。
| 归档时间: |
|
| 查看次数: |
19726 次 |
| 最近记录: |