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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: сигнал из класса в класс  (Прочитано 4927 раз)
acidburst
Гость
« : Сентябрь 03, 2011, 13:07 »

Доброе время суток.

задача научиться посылать и принимать сигналы из разных классов.

создал два класса
net и widget
в net:
Код
C++ (Qt)
signals:
   void signalNet();
 
public slots:
   void slotNet();

в widget:
Код
C++ (Qt)
public slots:
   void slotWidget();
 
signals:
   void signalWidget();

далее в widget.cpp
Код
C++ (Qt)
void Widget::on_pushButton_clicked()
{
   connect(net,SIGNAL(signalNet()),this,SLOT(slotWidget()));
}

ну и как водится не работает.
Я понимаю что я захотел сделать слишком просто, но как это сделать вообще?
читал http://www.prog.org.ru/topic_14497_0.html и http://www.prog.org.ru/topic_18435_0.html, но просветления не случилось.

PS. очевидно, что "все сложно", поэтому формат "для особо одаренных" приветствуется  Смеющийся
Записан
merke
Гость
« Ответ #1 : Сентябрь 03, 2011, 13:15 »

лучше скинь весь проект, мы тебе ткнем пальцем в то место где ступор у тебя
Записан
acidburst
Гость
« Ответ #2 : Сентябрь 03, 2011, 14:08 »

Никакого проекта не существует. Это только чтобы посмотреть как работает. Не дорос до проектов  Плачущий
net.h
Код
C++ (Qt)
#ifndef NET_H
#define NET_H
 
#include<QString>
 
class net
{
 
signals:
   void signalNet(QString);
 
public slots:
   void slotNet();
 
public:
   net();
   void test();
 
private:
 
};
 
#endif // NET_H

widget.h
Код
C++ (Qt)
#ifndef WIDGET_H
#define WIDGET_H
 
#include <QWidget>
#include <QString>
 
namespace Ui {
   class Widget;
}
 
class Widget : public QWidget
{
   Q_OBJECT
 
public:
   explicit Widget(QWidget *parent = 0);
   ~Widget();
 
public slots:
   void slotWidget(QString);
 
signals:
   void signalWidget();
 
private slots:
   void on_pushButton_clicked();
 
private:
   Ui::Widget *ui;
};
 
 
#endif // WIDGET_H

net.cpp
Код
C++ (Qt)
#include "net.h"
 
net::net()
{
}
void net::slotNet()
{
   emit signalNet("signal");
}

widget.cpp
Код
C++ (Qt)
#include "widget.h"
#include "ui_widget.h"
#include "net.h"
 
Widget::Widget(QWidget *parent) :
   QWidget(parent),
   ui(new Ui::Widget)
{
   ui->setupUi(this);
}
 
Widget::~Widget()
{
   delete ui;
}
 
void Widget::on_pushButton_clicked()
{
   connect(this, SIGNAL(signalWidget()),net,SLOT(slotNet()));
   connect(net,SIGNAL(signalNet(QString)),this,SLOT(slotWidget(QString)));
}
 
void Widget::slotWidget(QString str)
{
   ui->label->setText(str);
}
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



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

Код
C++ (Qt)
class net : public QObject
{
   Q_OBJECT
...

connect() лучше вызывать в конструкторе, поскольку это, как правило, нужно делать лишь один раз. и у тебя ничего не будет происходить до тех пор, пока ты где-нибудь явно не вызовешь slotNet().
« Последнее редактирование: Сентябрь 03, 2011, 14:11 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
acidburst
Гость
« Ответ #4 : Сентябрь 03, 2011, 19:18 »

разобрался, спасибо
очень полезно было добавить

Код
C++ (Qt)
net *netStatus=new net;
Записан
acidburst
Гость
« Ответ #5 : Сентябрь 03, 2011, 19:52 »

Код
C++ (Qt)
class net : public QObject
{
   Q_OBJECT
...

connect() лучше вызывать в конструкторе, поскольку это, как правило, нужно делать лишь один раз. и у тебя ничего не будет происходить до тех пор, пока ты где-нибудь явно не вызовешь slotNet().

как в конструкторе соединить если я экземпляр класса net позже создаю?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



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

тогда конечно нельзя Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
acidburst
Гость
« Ответ #7 : Сентябрь 03, 2011, 20:22 »

Блин, я серьезно.

Хотелось бы один раз соединить и все.
но класс к которому обращаться надо таким образом в инет лезет раз в полчаса. Его бы периодически надо убивать наверное.
Ну я еще не знаю Смеющийся, я далеко еще не программер даже не быдлокодер )
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



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

так а почему б не создавать в конструкторе? в нем создал себе экземпляр, соединил сигналы-слоты и выставил получасовой таймер на "вылазку" в инет - и ничего убивать не нужно. если я конечно правильно понял что ты хочешь сделать.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
acidburst
Гость
« Ответ #9 : Сентябрь 03, 2011, 21:03 »

да, правильно.
только я хотел написать програмку для телефона, поэтому стараюсь сэкономить память.
вроде как при уничтожении экземпляра память высвобождается.
я просто не в курсе стоит ли по этому поводу волноваться.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #10 : Сентябрь 03, 2011, 21:39 »

все зависит от размера класса. если данных в нем немного, то можно постоянно хранить объекты его типа.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
acidburst
Гость
« Ответ #11 : Сентябрь 03, 2011, 21:43 »

спасибо за пояснения.
как доделаю, если я когда-нибудь доделаю, попробую по разному. )
предстоит еще с xml разобраться. судя по всему это будет долго (
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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