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

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

Страниц: 1 2 [3] 4   Вниз
  Печать  
Автор Тема: connectSlotsByName не связывает со слотом  (Прочитано 17421 раз)
sudo
Гость
« Ответ #30 : Март 28, 2012, 11:11 »

Руки, блин, оторвать. Всем! И мне тоже. И глаза разуть Хотя нет, не надо. Посмотрел, вроде всё изначально нормально было, в первом сообщении. Но я тот код не пробовал, сразу сэмпл.

main.cpp
Код
C++ (Qt)
// Local
#include "Object.h"
 
// Qt
#include <QCoreApplication>
#include <QTimer>
 
 
int main(int argc, char *argv[])
{
 QCoreApplication a(argc, argv);
 
 Object obj;
 QTimer::singleShot(0, &obj, SLOT(startProcess()));
 
 return a.exec();
}
 

Object.h
Код
C++ (Qt)
#ifndef OBJECT_H
#define OBJECT_H
 
// Qt
#include <QObject>
#include <QProcess>
 
 
class Object : public QObject
{
 Q_OBJECT
 
 public:
   Object(QObject* parent = 0);
 
 public slots:
   void startProcess();
   void on_process_finished(int exitCode, QProcess::ExitStatus exitStatus);
 
 private:
   QProcess* process;
};
 
#endif // OBJECT_H
 

Object.cpp
Код
C++ (Qt)
// Local
#include "Object.h"
 
// Qt
#include <QDebug>
 
 
Object::Object(QObject* parent)
 : QObject(parent),
   process(new QProcess(this))
{
 process->setObjectName("process");
 QMetaObject::connectSlotsByName(this);
}
 
 
void Object::startProcess()
{
 process->start("ls -l");
}
 
 
void Object::on_process_finished(int exitCode, QProcess::ExitStatus exitStatus)
{
 qDebug() << exitCode << exitStatus;
}
 
« Последнее редактирование: Март 28, 2012, 11:14 от sudo » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #31 : Март 28, 2012, 11:50 »

Вполне рабочий сэмпл. В чём проблема?
Записан

Qt 5.11/4.8.7 (X11/Win)
sudo
Гость
« Ответ #32 : Март 28, 2012, 11:51 »

Вполне рабочий сэмпл. В чём проблема?

Ага, забыл сказать, что этот рабочий  Смеющийся
Записан
mutineer
Гость
« Ответ #33 : Март 28, 2012, 11:54 »

Вполне рабочий сэмпл. В чём проблема?

Ага, забыл сказать, что этот рабочий  Смеющийся

У мно тож все работает. У ТС две проблемы в коде - parent и слово enum ))
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #34 : Март 28, 2012, 12:05 »

Код
C++ (Qt)
CProcessThread::CProcessThread( const QString& appStr, const QStringList& listParam )
{
setParams(appStr,listParam);
m_process = NULL;
}
 
CProcessThread::CProcessThread()
{
m_process =NULL;
}
 
Мдя...
А где инициализация базового класса QThread Непонимающий
« Последнее редактирование: Март 28, 2012, 12:07 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
mutineer
Гость
« Ответ #35 : Март 28, 2012, 12:08 »

А ты тоже глазастый:)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #36 : Март 28, 2012, 12:09 »

У мно тож все работает. У ТС две проблемы в коде - parent и слово enum ))
Кстати, с enum тоже всё работает.
Записан

Qt 5.11/4.8.7 (X11/Win)
sudo
Гость
« Ответ #37 : Март 28, 2012, 12:22 »

У мно тож все работает. У ТС две проблемы в коде - parent и слово enum ))
Кстати, с enum тоже всё работает.

При прямом коннекте его нормализатор должен порезать, а через connectSlotsByName нужно смотреть, что возвращает QMetaMethod. Раз работает, значит порезанные параметры возвращает
Записан
sudo
Гость
« Ответ #38 : Март 28, 2012, 12:24 »

Мдя...
А где инициализация базового класса QThread Непонимающий

По идее, сролять не должно, просто parent как 0 пронизиализируется. А нам важно, чтобы parent был только у QProcessа
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #39 : Март 28, 2012, 12:33 »

По идее, сролять не должно, просто parent как 0 пронизиализируется. А нам важно, чтобы parent был только у QProcessа
Согласен. Исходя из всего вышесказанного TC нас просто парит...
Записан

Qt 5.11/4.8.7 (X11/Win)
daimon
Гость
« Ответ #40 : Март 28, 2012, 14:01 »

daimon Зачем ты везде суешь слово enum?

консоль буркнула как-то при коннекте не знает такой тип, вот и пришлось так писать и ещё его регестрировать - заметил в другом классе
Записан
mutineer
Гость
« Ответ #41 : Март 28, 2012, 14:09 »

Вот бы еще ты выводы консоли сюда писал...
Записан
daimon
Гость
« Ответ #42 : Март 28, 2012, 17:31 »

Вы говорите зачем я создал этот класс, мол процесс и так создаёт отдельный поток - всё просто, в моём классе есть сигнал, который возвращает указатель на этот поток и в другом классе, где я динамически создаю объекты вот этого класса, я вяжу с коннектом и удаляю также динамически (по пришедшему указателю) - плюс: сигнал приходит только, когда поток-процесс закончил работу и в другом классе могу параллельно динамически создавать кучу таких потоков и они сами удаляться по окончанию работы


хорошо есть ещё один вариант не использовать мой класс, а использовать просто QProcess, но тогда нужно вязать сигнал финиша именно класса QProcess со своим слотом, где нужно разыменовывать sender() на QProcess и там удалять  (не очень нравиться такой вариант)
Записан
mutineer
Гость
« Ответ #43 : Март 28, 2012, 17:33 »

хорошо есть ещё один вариант не использовать мой класс, а использовать просто QProcess, но тогда нужно вязать сигнал финиша именно класса QProcess со своим слотом, где нужно разыменовывать sender() на QProcess и там удалять  (не очень нравиться такой вариант)

connect(process, SIGNAL(finished(...)), process, SLOT(deleteLater()));
не подойдет такое?
Записан
daimon
Гость
« Ответ #44 : Март 28, 2012, 17:37 »

хорошо есть ещё один вариант не использовать мой класс, а использовать просто QProcess, но тогда нужно вязать сигнал финиша именно класса QProcess со своим слотом, где нужно разыменовывать sender() на QProcess и там удалять  (не очень нравиться такой вариант)

connect(process, SIGNAL(finished(...)), process, SLOT(deleteLater()));
не подойдет такое?
я про него говорю, вот только нужно узнать про указатель - разименовать (в этом процессе может быть ошибка)
Записан
Страниц: 1 2 [3] 4   Вверх
  Печать  
 
Перейти в:  


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