Здравствуйте, гость ( Вход | Регистрация )
bigory | Дата 1.11.2010, 23:33 |
На вот
#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 |
Попробуй для начала данные читать во временный 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 |
Добрый день возниклас следующая задача, надо вызывать из программы другую, но так как она является консольным приложением то хотелось бы скрыть запуск. Можно ли сделать вызываемый процесс невидимым??? | |
Просмотр темы полностью (откроется в новом окне) | |
![]() |
Текстовая версия | Сейчас: 21.4.2025, 21:27 |