crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Открыть новое окно консоли для вывода
novichkov
  опции профиля:
сообщение 29.12.2013, 8:51
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 64
Регистрация: 20.3.2008
Из: Северодвинск
Пользователь №: 128

Спасибо сказали: 6 раз(а)




Репутация:   1  


Подскажите пожалуйста, как можно решить следующую проблему:

Есть 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
  опции профиля:
сообщение 29.12.2013, 11:40
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

Спасибо сказали: 24 раз(а)




Репутация:   0  


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

Или можно сделать некое подобие консоли. К примеру диалоговое окно с QTextEdit на которое будет выводится информация и куда можно вводить команды.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
novichkov
  опции профиля:
сообщение 29.12.2013, 16:26
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 64
Регистрация: 20.3.2008
Из: Северодвинск
Пользователь №: 128

Спасибо сказали: 6 раз(а)




Репутация:   1  


Да, об отдельном окне QTextEdit я не подумал. Можно и так.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.12.2013, 18:57
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


novichkov, а для чего нужна эта консоль?
это просто окошко в которое что-то печатает программа, или в него ещё что-то пользователь командовать может ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
novichkov
  опции профиля:
сообщение 29.12.2013, 19:12
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 64
Регистрация: 20.3.2008
Из: Северодвинск
Пользователь №: 128

Спасибо сказали: 6 раз(а)




Репутация:   1  


Это просто окошко, в которое выводится результат работы консольной программы. Заморачиваться с взаимодействием типа ncurses я даже в Linux не стал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.12.2013, 21:37
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Второй вариант видится более простым, тем более что так делают многие программы-архиваторы:
program.exe - основная, консольная программа
programw.exe - графический интерфейс к основной программе.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kin63camapa
  опции профиля:
сообщение 9.12.2014, 20:27
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 32
Регистрация: 21.8.2010
Пользователь №: 1976

Спасибо сказали: 0 раз(а)




Репутация:   1  


не совсем понял моя ситуация или нет я сделал так в .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% запусков даже на виртуалках и медленных машинах его не успеваешь заметить

Сообщение отредактировал kin63camapa - 9.12.2014, 20:30
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 19:27