• 6937阅读
  • 2回复

[讨论]QT自定义按键 [复制链接]

上一主题 下一主题
离线kkkxcy
 

只看楼主 倒序阅读 楼主  发表于: 2011-08-09
最近几天在网上搜索一下关于QtE自定义按键的文章,看了有些收获,拿出来大家讨论讨论

公司是通过串口接的键盘,通过串口接键盘首先要有串口驱动,设置串口(波动率,数据位,停止位,数据怎样校验)

--------------------------test.h------------------------------------------------------

#ifndef TEST_H
#define TEST_H
class test :public QWidget
{
Q_OBJECT
public :
          test();
          int fd;
            QSocketNotifier       *notifier;
public slots:
        void readKeyboardData();
};
#endif



------------------------------test.cpp------------------------------
#include     <stdio.h>      /*标准输入输出定义*/
#include     <stdlib.h>     /*标准函数库定义*/
#include     <unistd.h>     /*Unix 标准函数定义*/
#include     <sys/types.h>  
#include     <sys/stat.h>  
#include     <fcntl.h>      /*文件控制定义*/
#include     <termios.h>    /*PPSIX 终端控制定义*/
#include     <errno.h>      /*错误号定义*/

#include "test.h"struct termios opt;
test::test()
{
    fd=-1;
    fd=open("/dev/ttyS0",O_RDONLY | O_NDELAY);
   // 设置串口属性
      cfsetispeed(&opt, B9600);
      cfsetospeed(&opt, B9600);
           opt.c_cflag |=CLOCAL | CREAD;
          opt.c_cflag &= ~CSIZE;
          opt.c_cflag |=CS8;
          opt.c_cflag &= ~PARENB;
           opt.c_cflag &= ~CSTOPB;
           tcsetattr(fd,TCSANOW,&opt);

    if(fd>0)
    {
                notifier = new QSocketNotifier( fd, QSocketNotifier::Read, this );
                connect( notifier, SIGNAL(activated(int)),this,SLOT(readKeyboardData()) );
    }

}

void test::readKeyboardData()
{
       char buf;
       int codekey;
       read(fd,buf,sizeof(buf));
       switch(buf)
      {
       case '1':
        codekey=Qt::Key_Left;
        break;
        case '2':
       codekey=Qt::Key_Right;
        break;
        case '3':
        codekey=Qt::Key_Up;
        break;
        case '4':
       codekey=Qt::Key_Down;
       break;
      }
    QWSServer::processKeyEvent(0,codekey,Qt::NoModifier,true,false);
}

int  main(int argc,char **argv)
{
    QApplication app(argc,argv);
    test ts;
    ts.show();
    return app.exec()
}


离线wxj120bw

只看该作者 1楼 发表于: 2011-08-11
回 楼主(kkkxcy) 的帖子
是通过数字键1~4来发送按键的向上,向下,向左,向右四个事件吧。
离线kkkxcy

只看该作者 2楼 发表于: 2011-08-11
是的
快速回复
限100 字节
 
上一个 下一个