Russian Qt Forum

Qt => Общие вопросы => Тема начата: BigHom от Сентябрь 22, 2011, 13:42



Название: QProcess особенности
Отправлено: BigHom от Сентябрь 22, 2011, 13:42
Есть программа :
Код
C++ (Qt)
#include "metkatoma.h"
#include "QtCore"
 
QProcess *proc17;
QString s;
QObject *paren;
 
void readFrom2()
{
   s=s+" "+proc17->readAllStandardOutput();
}
 
void stickmetka(QString Smetka)
{
   s="";
   proc17 = new QProcess( paren );
   proc17->connect( proc17, SIGNAL(readyReadStandardOutput()), paren, SLOT(readFrom2())  );
   proc17->start("minfo i:");
   Smetka=s;
}
 
эту программу пытаюсь вызвать из другой программы:
Код
C++ (Qt)
#include "exmetkatoma.h"
#include "metkatoma.h"
...
void exmetkatoma::on_pushButton_clicked()
{  QString s;
   s="";
   stickmetka(s);
}
 
В процессе работы выдаётся сообщение :
"QObject: connect : Cannot connect QProcess :: readyReadStandardOutput() to (null) :: readFrom2()"

Почему Cannot ?


Название: Re: QProcess особенности
Отправлено: andrew.k от Сентябрь 22, 2011, 13:50
Очень странный код.)
так paren где у тебя инициализируется? Вот он и null


Название: Re: QProcess особенности
Отправлено: Пантер от Сентябрь 22, 2011, 13:59
readFrom2 не слот и вообще не принадлежит  paren.


Название: Re: QProcess особенности
Отправлено: andrew.k от Сентябрь 22, 2011, 14:01
readFrom2 не слот и вообще не принадлежит  paren.
действительно)


Название: Re: QProcess особенности
Отправлено: BigHom от Сентябрь 22, 2011, 14:20
Как подправить , чтобы по сигналу readyReadStandardOutput()  обработка была функцией readFrom2() ?


Название: Re: QProcess особенности
Отправлено: Пантер от Сентябрь 22, 2011, 14:22
Создать слот и вызвать из него эту функцию. Или просто перенести из нее код. Как создавать слоты читай в ассистенте - это азы.


Название: Re: QProcess особенности
Отправлено: Yuriy от Сентябрь 22, 2011, 18:24
А по-моему код, приведенный выше - самый натуральный костыль  8)


Название: Re: QProcess особенности
Отправлено: BigHom от Сентябрь 23, 2011, 08:42
может фича? Как по-другому включить в кусками разработанное ПО - отдельный кусок? если всё в кучу валить , то получается компот.  вместо операторов - словесный понос - типа костыль , основы программирования, грязный хак и т.д


Название: Re: QProcess особенности
Отправлено: BigHom от Сентябрь 23, 2011, 13:34
readFrom2 не слот и вообще не принадлежит  paren.
при замене на :
Код
C++ (Qt)
class Counter : public QObject
{
public slots:
 void readFrom2();
 
};
 
Counter *paren;
 
 
ничего не мянеется - сообщение тоже самое cannot


Название: Re: QProcess особенности
Отправлено: Пантер от Сентябрь 23, 2011, 13:35
1. Q_OBJECT забыл
2. Если не поможет, полный код показывай.


Название: Re: QProcess особенности
Отправлено: BigHom от Сентябрь 23, 2011, 14:19
полный код показывай.
файл metkatoma.h :
Код
C++ (Qt)
#ifndef metkatoma_h
#define metkatoma_h
#include "qstring.h"
 
void stickmetka(QString Smetka);
 
#endif
 
файл metkatoma.cpp :
Код
C++ (Qt)
#include "metkatoma.h"
#include "qprocess.h"
#include "QtCore"
#include "qobject.h"
 
QProcess *proc17;
QString s;
class Counter : public QObject
{
  Q_OBJECT
  public slots:              void readFrom2();
};
 
Counter *paren;
 
void readFrom2()
{
   s=s+" "+proc17->readAllStandardOutput();
}
 
void stickmetka(QString Smetka)
{
   s="";
   proc17 = new QProcess( paren );
   proc17->connect( proc17, SIGNAL(readyReadStandardOutput()),
                    paren,   SLOT(readFrom2())    );
   proc17->start("minfo i:");  }
 
 
вызывающая файл *.cpp без изменения - при нажатии кнопки вызывается stickmetka и выдаётся сообщение об ошибке:
QObject: connect : Cannot connect QProcess :: readyReadStandardOutput() to (null) :: readFrom2()"


Название: Re: QProcess особенности
Отправлено: LisandreL от Сентябрь 23, 2011, 14:23
paren нигде не создаётся.


Название: Re: QProcess особенности
Отправлено: andrew.k от Сентябрь 26, 2011, 11:48
Описывать классы нельзя в cpp. Их не обработает moc.


Название: Re: QProcess особенности
Отправлено: BigHom от Сентябрь 27, 2011, 11:23
Где можно? Почему при трансляции ошибка не выдаётся? при описании класса в файле .h - также не работает.

paren нигде не создаётся.
при написании:
class Counter : public QObject
{
public slots:  void readFrom2();
};

Counter *paren= new Counter();

void stickmetka(QString Smetka)
{
    s="";
    proc17 = new QProcess( paren );
    proc17->connect( proc17, SIGNAL(readyReadStandardOutput()),  paren,   SLOT(readFrom2())    );
}
- выдаётся ошибка трансляции для строки  Counter *paren= new Counter(); :
"in function Counter:: Counter[in-charge](): collect2: ld returned 1 exit status"


Название: Re: QProcess особенности
Отправлено: andrew.k от Сентябрь 27, 2011, 14:16
Это не форум экстрасенсов.
Читай основы основ, тебе уже в самом начале сказали.
Чтобы ты хотябы смог вопросы задавать.

Counter * parent = new Counter () ;


Название: Re: QProcess особенности
Отправлено: andrew.k от Сентябрь 27, 2011, 14:21
может фича? Как по-другому включить в кусками разработанное ПО - отдельный кусок? если всё в кучу валить , то получается компот.  вместо операторов - словесный понос - типа костыль , основы программирования, грязный хак и т.д
"Родился на улице Герцена. В гастрономе № 22. Известный экономист. По призванию своему библиотекарь. В народе — колхозник. В магазине — продавец. В экономике, так сказать, необходим. Это, так сказать, система… эээ… в составе 120 единиц. Фотографируйте Мурманский полуостров — и получаете te-le-fun-ken. И бухгалтер работает по другой линии. По линии «Библиотека». Потому что не воздух будет, а академик будет! Ну вот можно сфотографировать Мурманский полуостров. Можно стать воздушным асом. Можно стать воздушной планетой. И будешь уверен, что эту планету примут по учебнику."

Из статьи шизофазия (http://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D0%B7%D0%BE%D1%84%D0%B0%D0%B7%D0%B8%D1%8F)


Название: Re: QProcess особенности
Отправлено: BigHom от Сентябрь 27, 2011, 15:05
Counter * parent = new Counter () ;
уже сообщал , что на это выдаётся ошибка :" in function "Counter:: Counter[in-charge]()" :"
а на 2-й строчке сообщение об ошибке : "collect2: ld returned 1 exit status"
Может , кроме писателей  романов есть программисты ? способные операторами выражаться , а не размахивающих костылями...


Название: Re: QProcess особенности
Отправлено: BigHom от Сентябрь 28, 2011, 09:42
Мистика: сегодня в строке " Counter *paren= new Counter(); " ошибка не выдаётся... это заговор писателей вредителей...
Всем ,кроме Yuriy, спасибо.