Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дополнительный вывод на косоль в Qt GUI, Нужна консоль чтобы выводить результат 
:(
    Опции темы
Angelica
Дата 10.4.2008, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 5.7.2006
Где: Москва

Репутация: нет
Всего: 2



Привет всем!

Люди, как бы организовать в Qt где есть уже окошко QDialog консоль?
Например, при нажатии на кнопочку в диалоге?

Нужно это чтобы запустить процесс в QProcess.

Код

void BackupPage::on_btnStart_clicked()
{
       
    SetConsoleOutputCP(1251); // эта строчка мне ничем не помогла((
    QString workingDir = ui.lePath->text() + "/pgsql/bin";
    QProcess Process(this);
    Process.setWorkingDirectory(workingDir);
    QStringList args;
    args << "-U" << ui.leUserName->text() << "-v"<< "-f" << "ar4.sql" << "CA";
    QStringList passwd;
    passwd << "PGPASSWORD=1234";
    Process.setEnvironment(passwd);
    Process.start("pg_dump", args);
    Process.waitForFinished();
    int exitCode = Process.exitCode();
}


Процесс создается, директория существует, запускаицо. Завершается с кодом 0. Но результат работы не появляется. А если запустить в консоли вручную, то все хорошо работает. Хочется посмотреть на результат на консоли при запуске из проги.

Может кто знает как сюда консоль присобачить? smile 
PM MAIL ICQ   Вверх
SABROG
Дата 10.4.2008, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



У QProcess есть методы всяческие:
QByteArray readAllStandardError ()
QByteArray readAllStandardOutput ()

В их сторону копай.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
mosg
Дата 10.4.2008, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 3.3.2008
Где: Moscow

Репутация: 1
Всего: 1



Цитата(Angelica @  10.4.2008,  15:19 Найти цитируемый пост)
Процесс создается, директория существует, запускаицо. Завершается с кодом 0. Но результат работы не появляется. А если запустить в консоли вручную, то все хорошо работает. Хочется посмотреть на результат на консоли при запуске из проги.Может кто знает как сюда консоль присобачить?  


В PRO файле добавь это:

Код

CONFIG += console


Перебири заново и будет консоль!

PM MAIL WWW ICQ Skype GTalk Jabber YIM MSN   Вверх
Mephisto
Дата 11.4.2008, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 1
Всего: 34



Цитата(Angelica @  10.4.2008,  16:19 Найти цитируемый пост)
args << "-U" << ui.leUserName->text() << "-v"<< "-f" << "ar4.sql" << "CA";

А тут точно без пробелов? 
PM   Вверх
Angelica
Дата 11.4.2008, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 5.7.2006
Где: Москва

Репутация: нет
Всего: 2



Цитата(mosg @  10.4.2008,  20:30 Найти цитируемый пост)
В PRO файле добавь это:


Помогло!
Спасибо всем большое!

Добавлено через 10 минут и 58 секунд
Цитата(Mephisto @  11.4.2008,  09:34 Найти цитируемый пост)
А тут точно без пробелов?  


Пока не знаю)) буду разбираться...
PM MAIL ICQ   Вверх
kryogen
Дата 20.3.2010, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.3.2010

Репутация: нет
Всего: нет



Добрый день, хотел бы вмешаться в тему с такой же задачей,ноцель- выводить сообщение не в консоль а в QLabel, например.
Помогите. Задача такова. хочу написать программу которая бы результат работы iwlist wlan0 scan - (wlan0 Failed to read scan data : Network is down) выводила бы в QLabel.
пробовал так, но не получилось. Видно что точно нужный результат программы выдаётся, но стандартный поток ошибки перехватить не получается.

Код


        QProcess *proc = new QProcess(this);
        proc->setProcessChannelMode( QProcess::MergedChannels );
        proc->setReadChannel(QProcess::StandardError);
 
QByteArray ba,bb,bc);
 
        if (proc->execute("iwlist", QStringList() << "wlan0"<<"scan")) {
      ba = "readed_line:  "+proc->readLine();
     bb="read_all: "+proc->readAll();
    bc="read_all_standard_error: "+proc->readAllStandardError();
 
QLabel *label2 = new QLabel(this);
 label2->setFrameStyle(QFrame::Panel | QFrame::Sunken);//Sunken
 label2->setAlignment(Qt::AlignBottom | Qt::AlignRight);
 label2->resize(388, 388);
 
  label2->setText(ba+bb+bc);
}



ошибки не выдаёт но и в выоде пусто - примеров подходящих найти не могу, может у меня подход не правильный? 
Програму пишу на АСУС ноуте в QDevelop, kubuntu 9.10
PM MAIL   Вверх
SABROG
Дата 20.3.2010, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Тема годовалой давности...

Код

if (proc->execute("iwlist", QStringList() << "wlan0"<<"scan"))


execute() статический метод, который возвращает код завершения приложения, а не булевое значение типа успешно или не успешно. Там int и 0 означает, что приложение удачно выполнилось, без ошибок. По этой логике, если iwlist удачно завершится, то в if() ты никогда не попадешь.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
kryogen
Дата 22.3.2010, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.3.2010

Репутация: нет
Всего: нет



вот так сделал всё равно без эффекта 
не получается перехватить  smile уже долго бьюсь ничего не могу найти или придумать...

    

    
Код

QProcess *proc = new QProcess(parent);
QByteArray ba,bb,bc,bd,be="ok";
    
    
     QString program = "iwlist";
     QStringList arguments;
     arguments << "wlan0" << "scan";
    
    proc->start(program, arguments);
     
      if (proc->Starting)
        {
            be="started";
            proc->setProcessChannelMode( QProcess::MergedChannels );
    proc->setReadChannel(QProcess::StandardError);
        
      if (proc->Running)
      {
        
        be="running";
    if (proc->ReadError){ba=" read error ";}else{
        ba= "readed_line:  "+proc->readLine();
        bb="read_all: "+proc->readAll();
        bc="read_all_standard_error: "+proc->readAllStandardError()+" "+proc->readAllStandardOutput();
    }
    
    QByteArray result;
         result="result:  "+result;
      QLabel *label2 = new QLabel(this);
 label2->setFrameStyle(QFrame::Panel | QFrame::Sunken);//Sunken
 label2->setAlignment(Qt::AlignBottom | Qt::AlignRight);
 label2->resize(388, 388);
  label2->setText(result+ba+bb+bc+bd+be);
 }
    }

PM MAIL   Вверх
kryogen
Дата 23.3.2010, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.3.2010

Репутация: нет
Всего: нет



Так как же всё таки словить standardoutput или standarderror?
PM MAIL   Вверх
SABROG
Дата 23.3.2010, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Вызови QProcess::waitForReadyRead() сразу после start().


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
kryogen
Дата 23.3.2010, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.3.2010

Репутация: нет
Всего: нет



вот так я сделал и получилось, что я хотел!

Код

QProcess *proc = new QProcess(parent);
    

    QByteArray ba,bb,bc,bd,be="ok";
    
    
     QString program = "iwlist";
     QStringList arguments;
     arguments << "wlan0" << "scan";
    
    proc->start(program, arguments);
    
        
 
      if (proc->Starting)
        {
            be="started";
            proc->setProcessChannelMode( QProcess::MergedChannels );
    proc->setReadChannel(QProcess::StandardError);
        
      if (proc->Running)
      {
        
        be="running";
        
        int msecs;
     proc->waitForReadyRead(msecs = 30000);
    
        ba= "readed_line:  "+proc->readLine();
        bb="read_all: "+proc->readAll();
        bc="read_all_standard_error: "+proc->readAllStandardError()+" "+proc->readAllStandardOutput();
    
    
    QByteArray result;
         result="result:  "+result;
      QLabel *label2 = new QLabel(this);
 label2->setFrameStyle(QFrame::Panel | QFrame::Sunken);//Sunken
 label2->setAlignment(Qt::AlignBottom | Qt::AlignRight);
 label2->resize(388, 388);
  label2->setText(result+ba+bb+bc+bd+be);
 }
    }


Спасибо тебе!Громадное!

Добавлено через 1 минуту и 4 секунды
...( нет ста постов чтоб репутацию добавить... .
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1330 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.