- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想编写一个响应我的按键事件的复古 snaker,这是我的代码:
paint.h
#ifndef PAINT_H
#define PAINT_H
#include<QWidget>
#include<QPaintEvent>
#include<QKeyEvent>
#include<QTimer>
class paint:public QWidget
{
Q_OBJECT
public:
paint(QWidget*parent=0);
~paint();
protected:
void paintEvent(QPaintEvent* );
void keypress(QKeyEvent* keyevent);
public slots:
void autorun();
private:
int snake[100][2];
int length;
QTimer *timer;
int flag;
};
#endif
paint.cpp
#include"paint.h"
#include<QtGui>
paint::paint(QWidget*parent):QWidget(parent)
{
flag=1;
snake[0][0]=45;
snake[0][1]=45;
length=4;
timer=new QTimer;
timer->start(1000);
connect(timer,SIGNAL(timeout()),this,SLOT(autorun()));
}
paint::~paint(){}
void paint::paintEvent(QPaintEvent* )
{
QPainter p(this);
p.setWindow(0,0,810,810);
QRectF border(45-20,45-20,16*45+40,16*45+40);
QRectF inter(45,45,16*45,16*45);
p.setPen(Qt::NoPen);
p.setBrush(QBrush(Qt::darkMagenta,Qt::SolidPattern));
p.drawRect(border);
p.setBrush(QBrush(Qt::gray,Qt::SolidPattern));
p.drawRect(inter);//
p.setPen(Qt::NoPen);
for(int i=45;i<=17*45;i+=45)
{
p.drawLine(45,i,17*45,i);
p.drawLine(i,45,i,17*45);
}
p.setPen(QPen(Qt::darkGray,1,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin));
// for(int i=0;i<length;++i)
{
QRectF snakebody(snake[0][0],snake[0][1],45,45);
p.setBrush(QBrush(Qt::red));
p.drawRect(snakebody);
}
}
void paint::keypress(QKeyEvent* keyevent)
{
qDebug()<<"key"<<endl;
switch(keyevent->key())
{
case Qt::Key_Up:
snake[0][1]=45;
break;
case Qt::Key_Down:
snake[0][1]=720;
break;
case Qt::Key_Left:
snake[0][0]=45;
break;
case Qt::Key_Right:
snake[0][1]=720;
break;
case Qt::Key_Q:
qDebug()<<"Q"<<endl;
break;
}
}
void paint::autorun()
{
snake[0][1]+=45;
if(snake[0][1]>720)
{
snake[0][1]=45;
snake[0][0]+=45;
if(snake[0][0]>720)
{
snake[0][0]=45;
}
}
update();
}
关注keypress()
函数,我想知道这个函数没有连接任何东西,它可以工作吗?实际上它没有,但我不知道如何激活它。我还需要做其他事情吗?
最佳答案
http://qt-project.org/doc/qt-4.8/qwidget.html#keyPressEvent .您需要覆盖 keyPressEvent,而不是创建您自己的 keyPress 函数。
所以,改变
void keypress(QKeyEvent* keyevent);
到
void keyPressEvent(QKeyEvent* keyevent)
关于c++ - 我的应用程序中的 QKeyEvent 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15630857/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!