c++ - Windows C++ GUI 应用程序

标签 c++ windows visual-studio cmake qt5

我目前正在致力于将我的 C++ Qt5/CMake 应用程序从 Linux 移植到 Windows。当在 Linux 中启动应用程序时,我看到 UI 并且一切正常。在 Windows 上,首先启动黑色终端,然后从终端启动我的应用程序。如何在没有黑色控制台的情况下启动应用程序?这并不美丽。

我正在使用 MSVC cmake 生成器和 Visual Studio 2013 Express。

谢谢大家!

最佳答案

编辑 CMakeLists.txt 以创建 WIN32 应用程序

IF(MSVC)
    SET(OPTIONS WIN32)
ENDIF(MSVC)

ADD_EXECUTABLE(${APP_NAME} ${OPTIONS}
    ${HEADER_FILES}
    ${SOURCE_FILES}
    }

编辑 main.cpp 以使用 wWinMain 并将输入参数转换为 argcargv

#ifdef _MSC_VER
#   include <windows.h>
#   include <shellapi.h>
#endif

/// ... some code

#ifdef _MSC_VER
INT WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPWSTR, INT)
{
    UNREFERENCED_PARAMETER(hInst);
    UNREFERENCED_PARAMETER(hPrevInstance);

    int argc;
    char** argv;
    {
        LPWSTR* lpArgv = CommandLineToArgvW( GetCommandLineW(), &argc );
        argv = (char**) malloc( argc*sizeof(char*) );
        int size, i = 0;
        for( ; i < argc; ++i )
        {
            size = wcslen( lpArgv[i] ) + 1;
            argv[i] = (char*) malloc( size );
            wcstombs( argv[i], lpArgv[i], size );
        }
        LocalFree( lpArgv );
    }

#else
int main(int argc, char *argv[])
{
#endif

    QGuiApplication a(argc, argv);

    /// ... some code

    int code = a.exec();

#ifdef _MSC_VER
    {
        int i = 0;
        for( ; i < argc; ++i ) {
            free( argv[i] );
        }
        free( argv );
    }
#endif

    return code;
}

关于c++ - Windows C++ GUI 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28909420/

相关文章:

visual-studio - mstest - 无法获得类型错误

c# - .NET Core Web 应用程序可以使用 .NET Framework 类库吗?

c# - 如何使用 HttpContext 创建单元测试以在方法内进行授权?

c++ - 如何在 Linux 中使用 C++ 库读取 html?

c++ - 为什么我得到 'Heap Corruption' ?

c++ - 将 std::string 的元素与字符进行比较的正确方法是什么?

C++ 缺少类型说明符 : syntax error

c++ - 如何使用 MPI 在不同的处理器上使用相同的数组

c++ - Windows 10 物联网树莓派 2 Tcp 连接 c++

Windows malloc 替换(例如,tcmalloc)和动态 crt 链接