Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Открыть новое окно консоли для вывода
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие
novichkov
Подскажите пожалуйста, как можно решить следующую проблему:

Есть command-line interface к моей программе. В Linux он работает отлично. В зависимости от параметров командной строки программа запускается либо как консольная, либо с графическим интерфейсом. Но в Windows, как известно, программы Qt с графическим интерфейсом не дружат с консолью (вывод программы "съедается"), если явно не задать CONFIG += console. Однако при этом появляется назойливое окно, ненужное большей частью. Мне хотелось бы и сохранить нормальный графический интерфейс, и дать возможность использовать программу из консоли.
Я вижу здесь три пути: 1. полностью убрать CLI из Windows-версии.
2. Разделить программу на две - одну с графическим, одну чисто консольную.
3. Запускать отдельное окно консоли, в которое и выводить вывод программы (как lupdate/lrelease в Windows).
Вопрос: как мне сделать последний вариант? Простой запуск cmd.exe в QProcess и попытки писать в него ничего не дают. Может, я что-то упускаю?

    QProcess *p = new QProcess(this);
    p->start("cmd.exe");
    qDebug()<<p->waitForStarted();

    p->write("simple string");
    qDebug()<<p->waitForBytesWritten();

Trisch
Я вот думаю, что создание нового процесса ничего не даст. Может все таки следует отказаться от этой затеи?

Или можно сделать некое подобие консоли. К примеру диалоговое окно с QTextEdit на которое будет выводится информация и куда можно вводить команды.
novichkov
Да, об отдельном окне QTextEdit я не подумал. Можно и так.
Litkevich Yuriy
novichkov, а для чего нужна эта консоль?
это просто окошко в которое что-то печатает программа, или в него ещё что-то пользователь командовать может ?
novichkov
Это просто окошко, в которое выводится результат работы консольной программы. Заморачиваться с взаимодействием типа ncurses я даже в Linux не стал.
Litkevich Yuriy
Второй вариант видится более простым, тем более что так делают многие программы-архиваторы:
program.exe - основная, консольная программа
programw.exe - графический интерфейс к основной программе.
kin63camapa
не совсем понял моя ситуация или нет я сделал так в .PRO файл добавил
CONFIG   += console
TEMPLATE += console

а в main.cpp
//всякие инклюды
#ifdef _WIN32
#include <windows.h>
#endif

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QSettings*AppSettings = new QSettings(/*у вас тут будет своя инициализация*/);
#ifdef _WIN32
    if (!AppSettings->value("ShowConsole").toBool()) FreeConsole();
#endif
    //Создаём окна
    return a.exec();
}

Номинально окно консоли появляется но в 99% запусков даже на виртуалках и медленных машинах его не успеваешь заметить
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2018 IPS, Inc.