簡體   English   中英

如何讓我的Qt C ++程序在Windows中打開控制台?

[英]How do I keep my Qt C++ program from opening a console in Windows?

我在Qt Creator中創建了一個應用程序,cmake和MinGW作為編譯器。 我已經看到這個問題正在為其他人解答,但他們使用.pro文件的常規Qt項目,而我使用CMakeLists.txt文件。 所以這些帖子對我沒用。

問題是我的應用程序在啟動時會打開一個控制台,像往常一樣,關閉此控制台也會關閉應用程序。 我想讓應用程序不要打開控制台,這樣對於那些不需要任何調試信息等的用戶來說,它更加用戶友好。

您很可能在CMakeLists.txt中有如下所示的行:

ADD_EXECUTABLE(exename ....)

當然,點是進一步的論點。 將其更改為:

ADD_EXECUTABLE(exename [WIN32] ...)

指定它是Win32應用程序而不是控制台應用程序。

或者,可以在CMAKE網站上找到“如果給出WIN32則將在創建的目標上設置屬性WIN32_EXECUTABLE ”。 當設置WIN32_EXECUTABLE時,它將“ 在Windows上使用WinMain入口點構建可執行文件 ”。

默認情況下,與qmake相反,cmake在Windows下使用啟用的控制台窗口構建Qt應用程序(Windows二進制文件可以使用不同的入口點 - 控制台窗口就是其中之一)。

您可以通過在可執行文件上設置WIN32_EXECUTABLE cmake屬性來禁用出現的控制台窗口。

這可以通過設置add_executable選項來實現,即

add_executable(myexe WIN32 ...)

或通過明確設置屬性:

set_property(TARGET main PROPERTY WIN32_EXECUTABLE true)

當有條件地禁用控制台窗口時,使用set_property()很有用,例如:

if(CMAKE_BUILD_TYPE STREQUAL "Release")
  set_property(TARGET main PROPERTY WIN32_EXECUTABLE true)
endif()

WIN32_EXECUTABLE以外的平台上進行編譯時, WIN32_EXECUTABLE屬性不起作用(參見CMAKE_WIN32_EXECUTABLE )。

WIN32 cmake變量一樣, WIN32_EXECUTABLE屬性還在編譯win64可執行文件時配置控制台窗口。

我有同樣的問題,但通過添加:

#CMakeLists.txt
# ... some text (like finding QT)

LINK_LIBRARIES(${QT_QTMAIN_LIBRARY})

# ... and then

ADD_EXECUTABLE(my_qt_project WIN32 ... )

如果我不使用LINK_LIBRARIES(${QT_QTMAIN_LIBRARY})我會收到錯誤:

error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup

這是一個老問題,但無論如何,有一個比這里發布的所有其他更好的解決方案:

CMAKE_POLICY(SET CMP0020 NEW)

添加它會自動為您處理所有事情。 如果你沒有設定這個政策,CMake實際上應該輸出警告,至少我是如何了解它的存在。

要使用Mingw構建,請添加CMake命令:

set_target_properties(target_name PROPERTIES LINK_FLAGS "-mwindows")

target_name替換為目標名稱(add_executable的第一個參數)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM