老哥,我仿照你教我的方式做了,编译能过,在主界面点开始通信,然后就崩溃了。已经证明能读到CAN发过来的数据,您看看我的程序:
.h文件,声明了信号和槽
signals:
DataShow(double c);
private slots:
void setValueVol(double);
.c文件,将信号和槽连接了起来:
MainWindow::MainWindow(QWidget *parent):
QMainWindow(parent),ui(new UI::MainWindow)
{
ui->setupUi(this);
.....
connect(this,SIGNAL(DataShow(double)),this,SLOT(setValueVol(double)));
....
}
串口初始化函数里面有一个设置事件回调函数:
ZCOMA_SetEventCallback(hdChannel, PDoTest, NULL, 0,0);
该函数来厂家提供的函数库文件,作用是一定时间周期调用一次回调函数。
重点来了,回调函数是一个静态函数,在里面读取CAN发送的数据,并显示到主界面上:
static DWORD __stdcall PDoTest(DWORD EventID, LPVOID pBuf, DWORD BufLen, LPVOID UserData)
{
...
ManWindow * pUse = (MainWindow *)UserData;
c=(float)(data[1]+data[2])/1000;
emit pUse->DataShow(c);
}
槽函数如下:
MainWindow::setValueVol(double)
{
QString temStr;
ui->NUMERIC_C->setText(tempStr.setNum(c));
}
已经验证过了如果把emit pUse->DataShow(c) 这句话放在别的函数里面就能成功的在界面上显示c的数值,放到 static DWORD __stdcall PDoTest(DWORD EventID, LPVOID pBuf, DWORD BufLen, LPVOID UserData)这个函数里面就崩溃,请问到底是什么原因呢?