繁体   English   中英

如何通过信号和插槽发送数据?

[英]How to send data through signal and slot?

有人可以帮忙如何连接信号和插槽吗?

我有function1可以实时接收数据(一个值)

void function1(int,double)
{
   if(condition)
     {
     //some code
     numb3 = 100;// double numb3 received new data
     emit mySignal(numb3);
     }
}

然后在其他函数中,我得到了应该接收捕获值的变量

   void function2(int,double)
    {

     double parameter2 = numb3;
    }

我尝试了类似的组合

Q_SIGNAL double mySignal(double newValue=0){return newValue;};
Q_SLOT double slot1(double param=0) {emit mySignal(param); };

and then in function2{
connect(customPlot,SIGNAL(mySignal()), qApp, SLOT(slot1()));
double parameter2 = slot1();}

但他们没有按照我的意愿工作。

提前致谢!

在发出信号的类的标题中定义您的自定义信号:

signals:
       void   signalName(paramType1,paramType2...);

在将接收信号的类中定义插槽以接收信号:

public slots:
      void   slotName(paramType1,paramType2...) ; // Should be THE SAME parameter types

现在,在您要开始连接两者的cpp内部进行连接:

connect(classObjectWhereTheSignalIs, SIGNAL(signalName(paramType1,paramType2)),classObjectWhereTheSlotIs,SLOT(slotName(paramType1,paramType2)));

现在,您随时可以发出这样的信号:

emit (signalName(paramOfTypeParamType1, paramOfTypeParamType2...));

干杯。

您应该在标头中定义这样的信号。

Q_SIGNAL:

void mySignal(int);

您的广告位将在下面的头文件中显示。

Q_SLOT:

void mySlot(int val);

现在,在cpp文件中,您可以将信号连接到如下所示的插槽。

connect(signalObject, SIGNAL(mySignal(int)),slotObject,SLOT(mySlot(int)));

您正在混合C ++“返回”和Qt信号/插槽。 通常,信号和插槽的返回类型为void。 另外,信号的主体是由MOC生成的,因此通常只声明它即可。

像这样:

#include <QObject>
#include <QDebug>

class CustomPlot: QObject {
    Q_OBJECT

public:
    void bla() {
        emit doSomething(3.1415926535);
    }

signals:
    void doSomething(double value);
};

class EventHandler: QObject {
    Q_OBJECT

public slots:
    void onDoSomething(double value) {
        qDebug() << "we are called with value =" << value;
    }

};

//in main:

CustomPlot plot;
EventHandler handler;

QObject::connect(&plot, &CustomPlot::doSomething, &handler, &EventHandler::onDoSomething);

plot.bla();  // in QtCreator's 'Application Output' panel you'll see:
             //we are called with value = 3.1415926535

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM