Russian Qt Forum
Май 06, 2024, 18:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: GUI / console одновременно  (Прочитано 18331 раз)
Zmey
Гость
« : Сентябрь 28, 2006, 13:33 »

Возможно ли написать приложение, которое, в зависимости от переданных параметров командной строки, либо показывает GUI-окно, либо ведет себя как консольное. Вот этот код не выводит текст в стандартный вывод.
Код:
include <iostream>
#include "MainWindow.h"

int main(int argc, char **argv)
{
bool gui = false;//здесь будет разбор параметров

QApplication app(argc, argv);

if (gui)
{

MainWindow window;
window.show();

return app.exec();
}
else
{
std::cout << "text";

return 0;
}
}
Записан
bigirbis
Гость
« Ответ #1 : Сентябрь 28, 2006, 13:41 »

Если это происходит под виндой, то в Visual Studio стандартный вывод херится. Тогда можно запустить проект из консоли.
Записан
Zmey
Гость
« Ответ #2 : Сентябрь 28, 2006, 13:49 »

Запускал из консоли, никакого вывода.
Записан
bigirbis
Гость
« Ответ #3 : Сентябрь 28, 2006, 13:54 »

Создай для консоли QCoreApplication
Записан
Zmey
Гость
« Ответ #4 : Сентябрь 28, 2006, 14:02 »

Так?
Код:
#include <iostream>
#include "MainWindow.h"

int main(int argc, char **argv)
{
bool gui = false;

if (gui)
{
QApplication app(argc, argv);

MainWindow window;
window.show();

return app.exec();
}
else
{
QCoreApplication app(argc, argv);
std::cout << "text";

return 0;
}
}


Один хер, никакой разницы.
Записан
Dendy
Гость
« Ответ #5 : Сентябрь 28, 2006, 14:05 »

Практика показьІвает, что под виндой лучше не пользоваться консолью в GUI-приложениях.

Создай гуёвое окно для консоли и перенаправляй весь поток вьІвода туда.

...
Так не получится.
Всё равно приложение будет слинковано с QtGui, а точка входа будет в WinMain в случае виндьІ.
Записан
Tonal
Гость
« Ответ #6 : Сентябрь 28, 2006, 14:07 »

В винде, у запускаемого файла есть флажек - GUI или консоль.
Это регулируется параметрами линкера.
Для GUI-я винда консоли не создаёт, а rtl, не связывает stdin, stdout, stderr с осёвыми хенделами.

Принципиально несколько решений:
1) Создавать консольное приложение, и забить на консоль, которая инагда появлякется, или грохать её за ненадовнастью.
2) Создать GUI-евое приложение, и в случае надобности создавать ей консоль.
После чего привязывать к ей stdin, stdout, stderr.
3) Если консольный режим нужен только для пайпов, то создать GUI-евое приложение и привязывать stdin, stdout, stderr к их хенделам.
Записан
Zmey
Гость
« Ответ #7 : Сентябрь 28, 2006, 14:42 »

Цитата: "Tonal"
В винде, у запускаемого файла есть флажек - GUI или консоль.
Это регулируется параметрами линкера.
Для GUI-я винда консоли не создаёт, а rtl, не связывает stdin, stdout, stderr с осёвыми хенделами.

А самим можно их связать?
Цитата: "Tonal"

Принципиально несколько решений:
1) Создавать консольное приложение, и забить на консоль, которая инагда появлякется, или грохать её за ненадовнастью.

Как ее грохнуть?
Цитата: "Tonal"

2) Создать GUI-евое приложение, и в случае надобности создавать ей консоль.
После чего привязывать к ей stdin, stdout, stderr.

Если я запускаю приложение из консоли, а потом создаю консоль сам, то весь текст выводится в мою созданную консоль, а надо в консоль, из которой я запустил приложение.
Цитата: "Tonal"

3) Если консольный режим нужен только для пайпов, то создать GUI-евое приложение и привязывать stdin, stdout, stderr к их хенделам.

Не знаю что такое пайпы  :cry:
Нужно так: есть параметры командной строки - отрабатывает функция в соответствие с этими параметрами, закрывается прога. При этом во время работы выводятся логи на экран.
Нет параметров - показываем GUI окно.
Записан
bigirbis
Гость
« Ответ #8 : Сентябрь 28, 2006, 15:11 »

Вот такую вещь в хелпе надыбал:
Цитировать
bool QFile::open ( FILE * fh, OpenMode mode )
This is an overloaded member function, provided for convenience.
Opens the existing file handle fh in the given mode. Returns true if successful; otherwise returns false.
Example:
    #include <stdio.h>

    void printError(const char* msg)
    {
        QFile file;
        file.open(stderr, QIODevice::WriteOnly);
        file.write(msg, qstrlen(msg));        // write to stderr
        file.close();
    }
When a QFile is opened using this function, close() does not actually close the file, but only flushes it.
Warning: If fh is stdin, stdout, or stderr, you may not be able to seek(). See QIODevice::isSequentialAccess() for more information.
Записан
aros
Гость
« Ответ #9 : Сентябрь 28, 2006, 16:07 »

Насколько я помню, в документаций написано, для того что бы получилась консоль нужно
QApplication app(argc, argv, false);
добовляеться обязательно еще один параметр и он должен быть false
Записан
Zmey
Гость
« Ответ #10 : Сентябрь 28, 2006, 16:12 »

Документация:
QApplication::QApplication ( int & argc, char ** argv, bool GUIenabled )
Constructs an application object with argc command line arguments in argv. If GUIenabled is true, a GUI application is constructed, otherwise a non-GUI (console) application is created.
Set GUIenabled to false for programs without a graphical user interface that should be able to run without a window system.
On X11, the window system is initialized if GUIenabled is true. If GUIenabled is false, the application does not connect to the X server. On Windows and Macintosh, currently the window system is always initialized, regardless of the value of GUIenabled. This may change in future versions of Qt.

Как раз таки Windows and Macintosh необходимы.
Записан
Вячеслав
Гость
« Ответ #11 : Сентябрь 28, 2006, 19:06 »

Цитата: "Zmey"

Нужно так: есть параметры командной строки - отрабатывает функция в соответствие с этими параметрами, закрывается прога. При этом во время работы выводятся логи на экран.
Нет параметров - показываем GUI окно.

Гы ! А что мешает (при наличии параметров) сварганить что-нибудь типа QTextBrowser  и сунуть его основным виждетом(и менюху с кнопарем "Идем в Бабруйск(quit)") ? или stdin таки нужен ?
Записан
Zmey
Гость
« Ответ #12 : Сентябрь 28, 2006, 19:59 »

Ну можно конечно... Но это все обходные маневры... А если пользователь захочет перенаправить стандартный вывод в файл?
Записан
xvadim
Гость
« Ответ #13 : Сентябрь 28, 2006, 20:49 »

Цитата: "Zmey"

Не знаю что такое пайпы  :cry:
Нужно так: есть параметры командной строки - отрабатывает функция в соответствие с этими параметрами, закрывается прога. При этом во время работы выводятся логи на экран.
Нет параметров - показываем GUI окно.


А если сделать вде версии прораммы: консольную и графическую? А пользователь пусть вызывает нужную.
Записан
Вячеслав
Гость
« Ответ #14 : Сентябрь 28, 2006, 23:09 »

Цитата: "Zmey"
Ну можно конечно... Но это все обходные маневры... А если пользователь захочет перенаправить стандартный вывод в файл?

Сам же  говоришь - есть ключи Подмигивающий --output-file=xxxx и вперед Подмигивающий
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.131 секунд. Запросов: 20.