2

如果没有给它作为 GUI 应用程序启动的程序提供参数,如果给它 args,它会通过命令行运行。我能够使用属性>链接器>子系统(控制台/SUBSYSTEM:CONSOLE)让Visual Studio显示并打印到控制台,但这使得控制台始终在应用程序启动时显示,我如何有选择地显示控制台,以便当应用程序使用 GUI 运行时,它不会出现。我浏览了该站点,但我发现的只是如何将其设置为仅作为 Windows 应用程序,并且我需要它同时作为

谢谢!!!

4

3 回答 3

4

我猜这可行:

#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();
}

用参数调用它,你会得到一个小(空)窗口。不带参数也不带窗口地调用它。

于 2012-04-18T18:46:23.300 回答
4

这里有一些代码,它创建了一个控制台并将输入和输出附加到它:

#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,但您应该能够将其粘贴在某个地方并使其工作。

编辑:添加所需的标题

于 2012-04-18T18:24:46.483 回答
0

您可以使用 windows 子系统来拥有它,并在需要控制台而应用程序也有 gui 时调用AllocConsole 。

于 2012-04-18T16:24:47.110 回答