Russian Qt Forum

Qt => Вопросы новичков => Тема начата: acidburst от Сентябрь 03, 2011, 13:07



Название: сигнал из класса в класс
Отправлено: 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_14497_0.html) и http://www.prog.org.ru/topic_18435_0.html (http://www.prog.org.ru/topic_18435_0.html), но просветления не случилось.

PS. очевидно, что "все сложно", поэтому формат "для особо одаренных" приветствуется  ;D


Название: Re: сигнал из класса в класс
Отправлено: merke от Сентябрь 03, 2011, 13:15
лучше скинь весь проект, мы тебе ткнем пальцем в то место где ступор у тебя


Название: Re: сигнал из класса в класс
Отправлено: acidburst от Сентябрь 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);
}


Название: Re: сигнал из класса в класс
Отправлено: kambala от Сентябрь 03, 2011, 14:10
Код
C++ (Qt)
class net : public QObject
{
   Q_OBJECT
...

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


Название: Re: сигнал из класса в класс
Отправлено: acidburst от Сентябрь 03, 2011, 19:18
разобрался, спасибо
очень полезно было добавить

Код
C++ (Qt)
net *netStatus=new net;


Название: Re: сигнал из класса в класс
Отправлено: acidburst от Сентябрь 03, 2011, 19:52
Код
C++ (Qt)
class net : public QObject
{
   Q_OBJECT
...

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

как в конструкторе соединить если я экземпляр класса net позже создаю?


Название: Re: сигнал из класса в класс
Отправлено: kambala от Сентябрь 03, 2011, 20:14
тогда конечно нельзя :)


Название: Re: сигнал из класса в класс
Отправлено: acidburst от Сентябрь 03, 2011, 20:22
Блин, я серьезно.

Хотелось бы один раз соединить и все.
но класс к которому обращаться надо таким образом в инет лезет раз в полчаса. Его бы периодически надо убивать наверное.
Ну я еще не знаю ;D, я далеко еще не программер даже не быдлокодер )


Название: Re: сигнал из класса в класс
Отправлено: kambala от Сентябрь 03, 2011, 20:59
так а почему б не создавать в конструкторе? в нем создал себе экземпляр, соединил сигналы-слоты и выставил получасовой таймер на "вылазку" в инет - и ничего убивать не нужно. если я конечно правильно понял что ты хочешь сделать.


Название: Re: сигнал из класса в класс
Отправлено: acidburst от Сентябрь 03, 2011, 21:03
да, правильно.
только я хотел написать програмку для телефона, поэтому стараюсь сэкономить память.
вроде как при уничтожении экземпляра память высвобождается.
я просто не в курсе стоит ли по этому поводу волноваться.


Название: Re: сигнал из класса в класс
Отправлено: kambala от Сентябрь 03, 2011, 21:39
все зависит от размера класса. если данных в нем немного, то можно постоянно хранить объекты его типа.


Название: Re: сигнал из класса в класс
Отправлено: acidburst от Сентябрь 03, 2011, 21:43
спасибо за пояснения.
как доделаю, если я когда-нибудь доделаю, попробую по разному. )
предстоит еще с xml разобраться. судя по всему это будет долго (