crossplatform.ru

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


  Ответ в QProcess сделать не видимым?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
bigory Дата 1.11.2010, 23:33
  На вот

#include "myprocess.h"

myProcess::myProcess(QWidget *parent) : QDialog(parent)
{
        sb.setText("start");
        ib.setText("input");
        QVBoxLayout *vl=new QVBoxLayout;
        vl->addWidget(&sb);
        vl->addWidget(&te);
        vl->addWidget(&le);
        vl->addWidget(&ib);
        setLayout(vl);

        connect(&sb,SIGNAL(clicked()),this,SLOT(startProcess()));
        connect(&ib,SIGNAL(clicked()),this,SLOT(doInput()));
        connect(&myProc,SIGNAL(readyReadStandardOutput()),this,SLOT(showOutput()));
        connect(&myProc,SIGNAL(readyReadStandardError()),this,SLOT(showOutput()));
}

void myProcess::startProcess()
{
        QString prog="C:\\WINDOWS\\system32\\cmd.exe";
     //   QString prog="C:\\Qt\\2010.05\\qt\\Forum\\testcon-build-desktop\\release\\testcon.exe";
        myProc.start(prog);
        if(myProc.waitForStarted())
                te.append(QString("Program <b>%1</b> started").arg(prog));
        else
                te.append(QString("Can't start program <b>%1</b>").arg(prog));
}

void myProcess::doInput()
{
        QString s=le.text()+"\n";
        if(myProc.write(s.toAscii())!=-1) le.clear();
}

void myProcess::showOutput()
{
        te.append(QString::fromLocal8Bit(myProc.readAllStandardOutput()));
        te.append(QString::fromLocal8Bit(myProc.readAllStandardError()));
}


#include <QtGui>

class myProcess : public QDialog
{
Q_OBJECT

public:
myProcess(QWidget *parent=0);
private slots:
void startProcess();
void showOutput();
void doInput();
private:
QProcess myProc;
QTextEdit te;
QLineEdit le;
QPushButton sb,ib;
};
hmmm Дата 9.4.2009, 0:17
  совсем забыл запись в процесс сразу после создания успешно проходит, правда толку от этого ноль=((
hmmm Дата 9.4.2009, 0:15
  Ловлю уже все сигналы... процесс стартует но при убийсте его почему не высылается finished. Started высылается нормально.. никаких ошибок не получаю =(( У кого=нибудь есть ещё идеи??(( Может быть кто-нибудь может првести примеры как грамотно читтаь из и писать в консольной приложение вызываемой через Qprocess???
hmmm Дата 8.4.2009, 21:08
 
Цитата(SABROG @ 8.4.2009, 20:51) *
Попробуй для начала данные читать во временный QByteArray и выводи в QTextEdit его размер, а не передавать его сразу в QTextEdit.
При конвертации QByteArray в QString чтение происходит до первого '\0', может быть данные где-то портятся.

У write() проверь возвращающееся значение, если -1, то ошибка, иначе количество переданных байт.

И проверь process->errorString() что выводит.


Проблема в том что сигналы readyReadStandardOutput()) и readyRead()) вообще не высылаются =((
SABROG Дата 8.4.2009, 20:51
  Попробуй для начала данные читать во временный QByteArray и выводи в QTextEdit его размер, а не передавать его сразу в QTextEdit.
При конвертации QByteArray в QString чтение происходит до первого '\0', может быть данные где-то портятся.

У write() проверь возвращающееся значение, если -1, то ошибка, иначе количество переданных байт.

И проверь process->errorString() что выводит.
hmmm Дата 8.4.2009, 19:49
  Спасибо вам, приеду домой щёлкну волшебную кнопочку)))

Возник ещё один вопрос;)

Использую Postgres и пишу обёртку над pg_dump и pg_restore (задание не критикуем я тоже в курсе что есть pgadmin3.. ))))

Когда запускаю pg_dump без параметров из консоли выводится
"Password:" и предложение ввести пароль. Надо чтобы пароль вводила сама программа. Пытаюсь это реализовтаь следующим образом:

CODE

#include <QtGui/QApplication>
#include <QtCore>
#include <QtGui>

class Shell : public QWidget
{
Q_OBJECT

private:
QProcess* process;
QLineEdit* txtCommand;
QTextEdit* txtDisplay;

public:
Shell(QWidget * parent =0) : QWidget(parent)
{
process = new QProcess(this);
txtDisplay = new QTextEdit;
QLabel* lbl = new QLabel("&Command");

txtCommand = new QLineEdit("dir");
lbl->setBuddy(txtCommand);
QPushButton* cmd = new QPushButton("&Enter");

connect(process, SIGNAL(readyReadStandardOutput()), SLOT(slotDataOnStdout()));
connect(process, SIGNAL(readyRead()), SLOT(writePass()));
connect(process, SIGNAL(readyReadStandardError()), SLOT(slotDataOnErrorStdout()));
connect(txtCommand, SIGNAL(returnPressed()), SLOT(slotReturnPressed()));
connect(cmd, SIGNAL(clicked()), SLOT(slotReturnPressed()));

QHBoxLayout* hbxLayout = new QHBoxLayout;
hbxLayout->addWidget(lbl);
hbxLayout->addWidget(txtCommand);
hbxLayout->addWidget(cmd);

QVBoxLayout* vbxLayout = new QVBoxLayout;
vbxLayout->addWidget(txtDisplay);
vbxLayout->addLayout(hbxLayout);
setLayout(vbxLayout);
}
public slots:
void slotDataOnStdout()
{
txtDisplay->append(process->readAllStandardOutput());
}
void slotDataOnErrorStdout()
{
txtDisplay->append(process->readAllStandardError());
}
void writePass()
{
//process->write("al\n");
txtDisplay->append("awerfawef");
//process->closeWriteChannel();
}
void slotReturnPressed()
{
QString strCommand = "pg_dump.exe";
process->start(strCommand);
}
};


При этом слот void slotDataOnStdout() ничего не выводит в TextEdit =(( до этого пробовал pg_dump с параметрами и удалось получать только сообщения об ошибках через void slotDataOnErrorStdout(). Ввод данных в процесс почему-то не увенчался успехом=( Да и думаю что надо вводить как-то хитрее чем просто передавать строку в process->write
Вообщем так вот =(

з.ы. В main ничего интересного обычный показ widgeta Shell
ViGOur Дата 8.4.2009, 19:25
  Аааа, вот вы о чем! :)
SABROG Дата 8.4.2009, 17:14
  Насколько я помню QProcess и так скрывает консольные приложения, например CMD.EXE. А чтобы они были видны надо использовать метод startDetached().
ViGOur Дата 8.4.2009, 12:46
  Можно, но только используя API ОС.

Под виндой нужно использовать хуки, под никсами не знаю.
hmmmm Дата 8.4.2009, 12:42
  Добрый день возниклас следующая задача, надо вызывать из программы другую, но так как она является консольным приложением то хотелось бы скрыть запуск. Можно ли сделать вызываемый процесс невидимым???
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 1:50