有人可以帮助您如何连接信号和插槽吗?
我有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();}
但他们没有按我的意愿工作。
提前致谢!
答案 0 :(得分:3)
在发出信号的类的标题中定义自定义信号:
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...));
干杯。
答案 1 :(得分:1)
你应该在标题中定义你的信号。
Q_SIGNAL:
void mySignal(int);
您的广告位在标题文件中如下所示。
Q_SLOT:
void mySlot(int val);
现在在cpp文件中,您可以将信号连接到插槽,如下所示。
connect(signalObject, SIGNAL(mySignal(int)),slotObject,SLOT(mySlot(int)));
答案 2 :(得分:0)
你正在混合C ++'return'和Qt signal / slot。通常,信号和槽具有返回类型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