如何让外部纯C函数与Qt通信
需求
我现在需要Qt接口让外部纯C函数调用。
目的:
C函数通知Qt更新数据。
想法:
提供一个Qt回调函数,作为接口。在接口中发送信号
问题 接口函数为一个全局函数,非类成员,如果让函数可以发送出信号。
我的做法:提供一个static 的成员接口 做emit signal
问题是 static必须要传入一个object 才可以调用非static成员。
如果可以简单实现
外部纯C函数与Qt通信
[解决办法]
linux下可以用dbus封装Qt程序的接口,外部C程序通过远程调用这个dbus接口来实现Qt更新数据。
[解决办法]
居于LGPL的还真不知道,如果dbus不能用的话,可以试试socket,但是我也不知道socket是LGPL还是GPL的
[解决办法]
使用动态库导出一个接口
[解决办法]
这不等同于C调用C++ 接口?
[解决办法]
为什么不能用操作系统的信号呢?就象windows下的消息。
[解决办法]
#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui>
#include <QtCore>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget();
static Widget *Instance();
static Widget *widget;
void emit_signal();
public slots:
void create();
void use_fun();
signals:
void create_label();
};
#endif
#include "widget.h"
static void show_new_label()
{
qDebug() << "in static fun\n";
Widget *w = Widget::Instance();
w->emit_signal();
//return;
}
Widget::Widget()
{
QPushButton *button = new QPushButton("button",this);
connect(button, SIGNAL(clicked()), this, SLOT(use_fun()));
connect(this, SIGNAL(create_label()), this, SLOT(create()));
resize(400,400);
}
Widget *Widget::widget = NULL;
Widget *Widget::Instance()
{
if(widget == NULL)
{
widget = new Widget;
}
return widget;
}
void Widget::emit_signal()
{
qDebug() << "emit signal";
emit create_label();
}
void Widget::use_fun()
{
show_new_label();
}
void Widget::create()
{
QLabel *label = new QLabel(this);
label->setText("this is a new label");
label->resize(100,100);
label->move(100,100);
label->show();
}
#include <QApplication>
#include "widget.h"
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
Widget *w = Widget::Instance();
w->show();
app.exec();
return 0;
}
enum cases{A,B,C,D};
static fun(cases)
{
switch(cases)
case A:
object_A;
object_A_emit_signal;
break;
case B:
object_B;
object__B_emit_signal;
break;
....
}