C++ - Qt - Visual Studio 2010 - 具有GUI和控制台的应用程序

C++ - Qt - Visual Studio 2010 - application with both gui and console

本文关键字:控制台 应用程序 GUI 2010 Qt Visual Studio C++ 具有      更新时间:2023-10-16

如果没有为程序提供参数,它将作为GUI应用程序启动,如果它被赋予参数,则通过命令行运行。 我能够让Visual Studio使用Properties>Linker>SubSystem(Console/SUBSYSTEM:CONSOLE)显示和打印到控制台,但这使得控制台始终在应用程序启动时显示,我如何有选择地显示控制台,以便在应用程序与GUI一起运行时不会出现。 我已经浏览了该网站,但我发现的只是如何将其设置为仅Windows应用程序,并且我需要它同时充当两者

谢谢!!!

我想这有效:

#include <QtGui/QApplication>
#include <QtGui/QMainWindow>

int
main(int n_app_args, char **app_arg)
{
    QCoreApplication * application = 0;
    if ( n_app_args == 1 )
    {
        application = new QCoreApplication(n_app_args, app_arg);
    }
    else
    {
        application = new QApplication(n_app_args, app_arg);
        QMainWindow * mainWindow = new QMainWindow();
        mainWindow->show();
    }

    return application->exec();
}

用参数调用它,你会得到一个小(空)窗口。 调用它时没有参数,也没有窗口。

这是我的一些代码,用于创建一个控制台并将输入和输出附加到其中:

#include <Windows.h>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
void Console::createConsole()
{
    AllocConsole();
    SetConsoleTitle("Debug console");
    int hConHandle;
    long lStdHandle;
    FILE *fp;   // redirect unbuffered STDOUT to the console
    lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    fp = _fdopen( hConHandle, "w" );
    *stdout = *fp;
    setvbuf( stdout, NULL, _IONBF, 0 ); 
    // redirect unbuffered STDIN to the console
    lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    fp = _fdopen( hConHandle, "r" );
    *stdin = *fp;
    setvbuf( stdin, NULL, _IONBF, 0 );  
    // redirect unbuffered STDERR to the console
    lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    fp = _fdopen( hConHandle, "w" );
    *stderr = *fp;
    setvbuf( stderr, NULL, _IONBF, 0 );
}

我没有使用过Qt,但你应该能够把它贴在某个地方并让它工作。

编辑:添加了所需的标题

您可以使用Windows子系统使用它,并在需要控制台时调用AllocConsole,而应用程序也具有GUI。