C ++ - Qt - Visual Studio 2010 - приложение с графическим интерфейсом и консолью

Если для программы не заданы аргументы, она запускается как приложение с графическим интерфейсом, если ей даны аргументы, она запускается через командную строку. Мне удалось заставить Visual Studio отображать и печатать на консоль с помощью свойства & gt; Linker & Subsystem (Console / SUBSYSTEM: CONSOLE), но благодаря этому консоль всегда отображается при запуске приложения, как можно выборочно отображать консоль, чтобы при запуске приложения с графическим интерфейсом оно не отображалось. Я просмотрел сайт, но все, что я нашел, это то, как настроить его как приложение Windows, и мне нужно, чтобы он функционировал как

Спасибо!!!

 emsr18 апр. 2012 г., 18:43
Как дела в Qt? Используете ли вы QApplication и QCoreApplication? Если нет, то пробовали ли вы приложение QApplication *; тогда if (argc == 1) app = new QCoreApplication (...); еще приложение = новое QApplication (...) ;?
 emsr18 апр. 2012 г., 20:08
QCoreApplication является базовым классом QApplication, наследует QCoreApplication. QCoreApplication для консольных приложений. (Я должен был объявить приложение QCoreApplication * выше). Я думаю, что если вы назначите приложение, как у меня выше, вы должны получить консольное приложение для argc == 1 и графическое приложение в противном случае.
 user134192918 апр. 2012 г., 18:53
прямо сейчас я проверяю argc, и если & gt; 1 я не вызываю show (), а использую отдельный конструктор, который устанавливает данные и в основном щелкает пользователем ... я не знаком с тем, что у вас есть выше Я новичок в C ++ и в Qt ... Является ли идея иметь два полностью отдельных класса, один, который создается в main, если это sa gui, и другой, если он должен быть консольным приложением? потому что это похоже на то, что я делаю много дублирования, которого я пытаюсь избежать

Ответы на вопрос(3)

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

Назовите его аргументом, и вы получите небольшое (пустое) окно. Назовите это без аргумента и без окна.

 08 апр. 2016 г., 11:26
Но решает ли это проблему? Если вы компилируете с SUBSYSTEM: CONSOLE, вы все равно получаете консоль с QApplication, а если вы компилируете с SUBSYSTEM: WINDOWS, вы не получаете вывод на консоль.

AllocConsole когда вам нужна консоль, в то время как приложение имеет графический интерфейс.

 user134192918 апр. 2012 г., 18:33
Я нахожу ссылки для использования этого для c #, но не для c ++, и у меня возникают проблемы с его использованием ... также все ссылки, которые я нахожу, не для приложений Qt ...
 18 апр. 2012 г., 18:41
Не для Qt, но посмотрите на этоhalcyon.com/~ast/dload/guicon.htm & Амп;comsci.liu.edu/~murali/win32gui/Win32Apps.htm
 user134192918 апр. 2012 г., 18:50
Спасибо, но мне нужно сделать это с помощью Qt ...

который я лежал без дела, который создает консоль и присоединяет к ней ввод и вывод:

#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, но вы должны быть в состоянии куда-нибудь его вставить и заставить его работать.

Изменить: добавлены необходимые заголовки

 08 апр. 2016 г., 11:21
Это работает несколько, но не решает большую проблему. ОП хотел использовать консоль, если переданы параметры. Однако если параметры передаются из консоли, то открывается новая консоль, а существующая все еще не получает никакого вывода.

Ваш ответ на вопрос