Qt CMake显示控制台

Qt CMake显示控制台,qt,cmake,Qt,Cmake,我制作了一个应用程序,当我在QtCreator中运行时,一切都进行得很顺利,我的问题是当我生成版本时,我的应用程序会显示一个控制台,为什么会发生这种情况,以及如何避免它 这是我的密码 #include "mainwindow.h" #include "./ui_mainwindow.h" #include <QMessageBox> #include <QSqlDatabase> #include <QSqlError>

我制作了一个应用程序,当我在QtCreator中运行时,一切都进行得很顺利,我的问题是当我生成版本时,我的应用程序会显示一个控制台,为什么会发生这种情况,以及如何避免它

这是我的密码

#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlTableModel>


MainWindow::MainWindow(QWidget *parent)
  : QMainWindow(parent), ui(new Ui::MainWindow)
{
  ui->setupUi(this);
  QSqlDatabase db=QSqlDatabase::addDatabase("QPSQL");
  if(!db.isDriverAvailable("QPSQL")){
      QMessageBox::critical(this,qApp->applicationName(),db.lastError().text());
      return;
    }
  db.setDatabaseName("covid");
  db.setHostName("localhost");
  db.setPassword("2311046");
  db.setPort(5432);
  db.setUserName("postgres");
  if(!db.open()){
      QMessageBox::critical(this,qApp->applicationName(),db.lastError().text());
      return;
    }
  QMessageBox::information(this,qApp->applicationName(),"Todo bien");
}

MainWindow::~MainWindow()
{
  delete ui;
}
在这里,我将显示每次运行.exe时显示的窗口:


这应该很简单。只需添加:

#。。。
设置(上需要CMAKE\U CXX\U标准)
#确保我们在Windows上将可执行文件构建为GUI应用程序,而不是控制台应用程序
设置(CMAKE_WIN32_可执行文件为真)
# ...
作为:

当[
WIN32\u EXECUTABLE
]设置为true时,在Windows上链接的可执行文件将使用WinMain()入口点而不仅仅是main()创建。这使其成为GUI可执行文件,而不是控制台应用程序。[…]如果在创建目标时设置了CMAKE_WIN32_可执行变量,则此属性由该变量的值初始化

add_executable(untitled1…
添加一个
WIN32
作为第二个参数
add_executable(untitled1 WIN32…
),以避免您创建windows控制台应用程序。文档在此处解释了这一点
cmake_minimum_required(VERSION 3.5)

project(untitled1 LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# QtCreator supports the following variables for Android, which are identical to qmake Android variables.
# Check http://doc.qt.io/qt-5/deployment-android.html for more information.
# They need to be set before the find_package(Qt5 ...) call.

#if(ANDROID)
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
#    if (ANDROID_ABI STREQUAL "armeabi-v7a")
#        set(ANDROID_EXTRA_LIBS
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
#    endif()
#endif()

find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
find_package(Qt5 COMPONENTS Sql REQUIRED)

if(ANDROID)
  add_library(untitled1 SHARED
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
  )
else()
  add_executable(untitled1
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
  )
endif()

target_link_libraries(untitled1 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
target_link_libraries(untitled1 PUBLIC Qt${QT_VERSION_MAJOR}::Sql)