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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QProcess особенности  (Прочитано 10633 раз)
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 ?
« Последнее редактирование: Сентябрь 22, 2011, 14:14 от BigHom » Записан
andrew.k
Гость
« Ответ #1 : Сентябрь 22, 2011, 13:50 »

Очень странный код.)
так paren где у тебя инициализируется? Вот он и null
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Сентябрь 22, 2011, 13:59 »

readFrom2 не слот и вообще не принадлежит  paren.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
andrew.k
Гость
« Ответ #3 : Сентябрь 22, 2011, 14:01 »

readFrom2 не слот и вообще не принадлежит  paren.
действительно)
Записан
BigHom
Гость
« Ответ #4 : Сентябрь 22, 2011, 14:20 »

Как подправить , чтобы по сигналу readyReadStandardOutput()  обработка была функцией readFrom2() ?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Сентябрь 22, 2011, 14:22 »

Создать слот и вызвать из него эту функцию. Или просто перенести из нее код. Как создавать слоты читай в ассистенте - это азы.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Yuriy
Гость
« Ответ #6 : Сентябрь 22, 2011, 18:24 »

А по-моему код, приведенный выше - самый натуральный костыль  Крутой
Записан
BigHom
Гость
« Ответ #7 : Сентябрь 23, 2011, 08:42 »

может фича? Как по-другому включить в кусками разработанное ПО - отдельный кусок? если всё в кучу валить , то получается компот.  вместо операторов - словесный понос - типа костыль , основы программирования, грязный хак и т.д
Записан
BigHom
Гость
« Ответ #8 : Сентябрь 23, 2011, 13:34 »

readFrom2 не слот и вообще не принадлежит  paren.
при замене на :
Код
C++ (Qt)
class Counter : public QObject
{
public slots:
 void readFrom2();
 
};
 
Counter *paren;
 
 
ничего не мянеется - сообщение тоже самое cannot
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Сентябрь 23, 2011, 13:35 »

1. Q_OBJECT забыл
2. Если не поможет, полный код показывай.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
BigHom
Гость
« Ответ #10 : Сентябрь 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()"
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #11 : Сентябрь 23, 2011, 14:23 »

paren нигде не создаётся.
Записан
andrew.k
Гость
« Ответ #12 : Сентябрь 26, 2011, 11:48 »

Описывать классы нельзя в cpp. Их не обработает moc.
Записан
BigHom
Гость
« Ответ #13 : Сентябрь 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"
« Последнее редактирование: Сентябрь 28, 2011, 07:31 от BigHom » Записан
andrew.k
Гость
« Ответ #14 : Сентябрь 27, 2011, 14:16 »

Это не форум экстрасенсов.
Читай основы основ, тебе уже в самом начале сказали.
Чтобы ты хотябы смог вопросы задавать.

Counter * parent = new Counter () ;
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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