- 论坛徽章:
- 0
|
qt的按键代码
hello.h---------------------------------
#include
#include
#include
#include
#include
#include
#include
#include
#include
class myMainWindow : public QWidget
{
Q_OBJECT
public:
myMainWindow();
~myMainWindow();
public slots:
void getKey();
private:
void paintEvent(QPaintEvent *);
QPainter *painter;
int fd;
QLabel *label;
QTimer *readPress;
bool keyStat[6];
};
hello.cpp---------------------------
#include "hello.h"
#include
#include
#include
#include
#include
#include
#include
myMainWindow::myMainWindow()
{
setBackgroundColor(green);
setMinimumSize(200,150);
setMaximumSize(200,150);
for(int i=0;isetGeometry(20,20,200,40);
label->setBackgroundColor(green);
label->setFont(QFont("Times",15,QFont::Black));
label->setText("the six rectangle show\n"
"key pressed or not");
label->setAlignment(AlignLeft);
readPress = new QTimer(this); //使用q版定时器,问题就解决了。
connect(readPress,SIGNAL(timeout()),this,SLOT(getKey()));
readPress->start(10); //开始
fd = open("/dev/buttons", O_NONBLOCK); //只能在这里打开一次,不然中断会丢失,这是驱动程序的结果
if (fd begin(this);
painter->setBrush(QBrush(blue,0)); //设置在那个画矩形的前面,之后画出的矩形都是用这个颜色填充
for(i=0;isetBrush(QBrush(blue,SolidPattern));
if(idrawRoundRect(20+i*WIDTH,60,WIDTH,LEN,40,40);
}
else {
painter->drawRoundRect(20+(i-3)*WIDTH,60+LEN,WIDTH,LEN,40,40);
}
painter->setBrush(QBrush(blue,0)); //默认的是这个透明的画刷
}
painter->end();
}
void myMainWindow::getKey()
{
readPress->stop();
int ret;
int key_value[6]={0,};
ret = read(fd, key_value, sizeof key_value);
if (ret != sizeof key_value){
puts("no press\n");
goto out;
}
for(int i=0;istart(10);
}
int main(int argc,char **argv)
{
QApplication a(argc,argv);
myMainWindow w;
a.setMainWidget(&w);
w.show();
a.exec();
}
![]()
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93291/showart_2106879.html |
|