• 8555阅读
  • 4回复

[提问]linux底层signal如何链接到qtevent [复制链接]

上一主题 下一主题
离线povoss
 

只看楼主 倒序阅读 楼主  发表于: 2014-03-28
qtearm-4.8.0中,底层驱动can驱动已经实现,并且该驱动使用了异步通知,linux应用测试程序可以通过   signal(SIGIO,数据读取函数);调用数据读取函数,
但是在qte中如何实现呢?如下代码:
void MainWindow::on_btn_start_clicked()
{
    QString str,temp;
    int oflags;
    unsigned int canid[6]={0x00000181,0x00000182,0x00000183,0x00000184,0x00000185,0x00000186};
    fd = open("/dev/mcp2515",O_RDWR);//|O_NONBLOCK);//s=socket(PF_CAN, SOCK_RAW, CAN_RAW);
    if(fd<0)
    {
        str.sprintf("fail to open mcp2515 ,return val=%d\n",ret);
        ui->recEdit->setText(str);
    }
    else
    {
        str.sprintf("open mcp2515 success,return val=%d,fd=%d\n",ret,fd);
        ui->recEdit->setText(str);
    }

   signal(SIGIO,PostoQT);
   fcntl(fd,F_SETOWN,getpid());
   oflags=fcntl(fd,F_GETFL);
   fcntl(fd,F_SETFL,oflags|FASYNC);

    //ptimer->start(100);

}

PostoQT如果是MainWindow的成员函数,那么因为不是静态的编译报错。。。。
如果改静态。。。。。省略n字。。。

求解,如何链接事件响应。


离线povoss

只看该作者 1楼 发表于: 2014-03-28
离线povoss

只看该作者 2楼 发表于: 2014-03-31
好烂的论坛
离线yuxue

只看该作者 3楼 发表于: 2014-04-06
看下qt 源码 有个qtmouselinuxinput   触摸或鼠标看他是怎么做的
1条评分好评度+1
povoss 好评度 +1 - 2014-04-10
离线povoss

只看该作者 4楼 发表于: 2014-04-10
还得靠自己。

1.定义全局指针pmainwindow,定义事件值:
MainWindow *pmainWindow;

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    //QWSServer::setCursorVisible(false);

    MainWindow mainWindow;
    pmainWindow=&mainWindow;
。。。

mainwindow.h中增加
extern MainWindow* pmainWindow;
#define myeid (QEvent::Type)1000
void PostoQT(int num);

2.关联signal(SIGIO,PostoQT):
void PostoQT(int num)
{
    //QMessageBox msg;
    //msg.setText("handle.\n");
    //msg.exec();
    printf("i have received the sig=%d!\n",num);

    //QApplication::postEvent(pmainWindow,new myevent);
    QApplication::postEvent(pmainWindow,new QEvent(myeid));
}

3.重载customEvent函数
void MainWindow::customEvent( QEvent *e )
{

    printf("e->type()=%d.\n",e->type());//for test

    if ( e->type() == myeid) {  // It must be myEvent
        canrec();
    }
}

canrec()中做接收处理。
快速回复
限100 字节
 
上一个 下一个