我正在尝试使用提升信号和插槽将 gui 连接到我的逻辑线程,逻辑类具有将函数连接到信号的简洁方法。这是 locig 类的简化副本:
#include <boost/signals2.hpp>
#include <boost/function.hpp>
typedef boost::signals2::signal<void (const double&)> some_signal;
typedef some_signal::slot_type some_slot;
class LogicClass {
some_signal sig;
public:
LogicClass();
~LogicClass();
void register_callback(boost::function<void (const double&)>) {
sig.connect(boost::bind(&LogicClass::doStuff(), this, _1));
}
void doStuff(); // Does a bunch of stuff in a separate thread and fires LogicClass::sig every now and then
}
这是 gui 类的简化副本
#include <boost/signals2.hpp>
#include <QWidget.h>
class GuiClass : public QWidget {
Q_OBJECT //etc. etc. w.r.t. Qt stuff
public:
GuiClass ();
~GuiClass ();
void draw_stuff(const double&); // Want this to listen to LogicClass::sig;
}
在我的代码中的某个时刻,gui 类已经实例化,但逻辑类没有。所以我想实例化 LogicClass 并订阅GuiClass::draw_stuff(const double&)
信号LogicClass::sig
。就像是
#include <logicclass.h>
#include <guiclass.h>
GuiClass *gui; //Was initialized elsewhere, but available here;
void some_function() {
LogicClass *logic = new LogicClass();
logic->register_callback(gui->drawStuff);
logic->do_stuff(); //Start drawing on the gui
delete logic;
}
不幸的是,这不起作用。不言而喻,它会非常喜欢它!
我知道 Qt 也实现了信号和插槽,但我想使用 boost 来实现与其他 UI 库的可移植性。