C ++ - Qt - Visual Studio 2010 - 同时使用gui和console的应用程序

时间:2012-04-18 16:20:03

标签: c++ visual-studio-2010 qt

如果没有为程序提供参数,它将作为GUI应用程序启动,如果给出了args,则通过命令行运行。我能够通过Properties> Linker> SubSystem(Console / SUBSYSTEM:CONSOLE)让visual studio显示并打印到控制台,但是这使得控制台在应用程序启动时始终显示,我如何有选择地显示控制台,以便当使用GUI运行应用程序时,它不会出现。我查看了网站,但我发现的只是如何将它设置为只是一个Windows应用程序,我需要它作为两者兼有

感谢!!!

3 个答案:

答案 0 :(得分: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();
}

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

答案 1 :(得分:3)

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

#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,但是你应该能够坚持到某个地方并让它发挥作用。

编辑:添加了所需的标题

答案 2 :(得分:0)

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