Qt使用星空图作为窗口背景,点击键盘的WASD控制小飞机在上面移动。

这篇具有很好参考价值的文章主要介绍了Qt使用星空图作为窗口背景,点击键盘的WASD控制小飞机在上面移动。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

事件函数的使用依托于Qt的事件机制,一个来自于外部事件的传递机制模型如下所示

Qt使用星空图作为窗口背景,点击键盘的WASD控制小飞机在上面移动。

Qt使用星空图作为窗口背景,点击键盘的WASD控制小飞机在上面移动。

信号槽虽然好用,但是无法包含所有的情况,事件函数可以起到对信号槽无法覆盖的一些时机进行补充,事件函数的使用无需连接。

常用的事件函数如下所示。

// 绘制事件

void QWidget::paintEvent(QPaintEvent * event) [virtual protected]

// 大小改变事件

void QWidget::resizeEvent(QResizeEvent * event) [virtual protected]

// 鼠标按压事件

void QWidget::mousePressEvent(QMouseEvent * event) [virtual protected]

// 鼠标释放事件

void QWidget::mouseReleaseEvent(QMouseEvent * event) [virtual protected]

// 鼠标双击事件

void QWidget::mouseDoubleClickEvent(QMouseEvent * event) [virtual protected]

// 鼠标移动事件

void QWidget::mouseMoveEvent(QMouseEvent * event) [virtual protected]

// 移动事件

void QWidget::moveEvent(QMoveEvent * event) [virtual protected]

// 按键按压事件

void QWidget::keyPressEvent(QKeyEvent * event) [virtual protected]

// 按键释放事件

void QWidget::keyReleaseEvent(QKeyEvent * event) [virtual protected]

// 获取焦点事件

void QWidget::focusInEvent(QFocusEvent * event) [virtual protected]

// 失去焦点事件

void QWidget::focusOutEvent(QFocusEvent * event) [virtual protected]

// 关闭事件

void QWidget::closeEvent(QCloseEvent * event) [virtual protected]

// 进入事件

void QWidget::enterEvent(QEvent * event) [virtual protected]

// 离开事件

void QWidget::leaveEvent(QEvent * event) [virtual protected]

QPaintDevice类表示可绘制设备,其派生类均可以被QPainter类绘制。

示例代码:

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include<QDebug>
#include<QPixmap>//图片类
#include<QPainter>//画家类
#include<QKeyEvent>//键盘事件参数
namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
protected:
    //声明事件函数 虚函数
    void paintEvent(QPaintEvent *event);
    void keyPressEvent(QKeyEvent *event);

private:
    Ui::Dialog *ui;
};

#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
}

Dialog::~Dialog()
{
    delete ui;
}
//定义事件函数
void Dialog::paintEvent(QPaintEvent * event)
{
    //输出窗口宽高
    qDebug()<<this->width()<<this->height();
    //创建画家类对象
    QPainter painter(this);
    QPixmap pic(":/new/prefix1/ikun.jpg");
    //绘制图片函数
    //void	drawPixmap(int x, int y, int width, int height, const QPixmap & pixmap)
    //参数:横坐标 纵坐标 宽度 高度  图片内容
    //设置随主窗口大小改变而变化
    painter.drawPixmap(0,0,this->width(),this->height(),pic);

}
//所有的事件函数的参数都包含了当前类型事件的参数信息
void Dialog::keyPressEvent(QKeyEvent *event)
{
    if(event->key()==Qt::Key_A)
    {
        //获得当前进度条的值
        int value=ui->progressBar->value();
        //减少进度条的值
        ui->progressBar->setValue(--value);
    }else if(event->key()==Qt::Key_D)
    {
        //获得当前进度条的值
        int value=ui->progressBar->value();
        //增加进度条的值
        ui->progressBar->setValue(++value);
    }
}

练习:键盘WASD控制飞机移动

使用星空图作为窗口背景,点击键盘的WASD控制小飞机在上面移动。

如果小飞机触碰到窗口边缘,弹出Q事件函数--实例:使用星空图作为窗口背景,点击键盘的WASD控制小飞机在上面移动。

Qt使用星空图作为窗口背景,点击键盘的WASD控制小飞机在上面移动。

Qt使用星空图作为窗口背景,点击键盘的WASD控制小飞机在上面移动。

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include<QDebug>
#include<QPixmap>
#include<QPainter>
#include<QKeyEvent>
#include<QMessageBox>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
protected:
    void paintEvent(QPaintEvent *event);
    void keyPressEvent(QKeyEvent *event);
private:
    Ui::Dialog *ui;
};

#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    QSize size(ui->labelImg->width(),ui->labelImg->height());
    QPixmap pic(":/new/prefix1/plane.png");
    pic = pic.scaled(size,Qt::KeepAspectRatioByExpanding);
    ui->labelImg->setPixmap(pic);
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPixmap pic(":/new/prefix1/star.png");
    painter.drawPixmap(0,0,width(),height(),pic);

}

void Dialog::keyPressEvent(QKeyEvent *event)
{
    //获取飞机当前位置
    int x=ui->labelImg->x();
    int y=ui->labelImg->y();
    qDebug()<<ui->labelImg->x()<<ui->labelImg->y();//160 120
     if(event->key()==Qt::Key_W)   //向上移动
     {
        ui->labelImg->move(x,y-5);

     }else if(event->key()==Qt::Key_A)  //向下移动
     {

         ui->labelImg->move(x-5,y);

     }else if(event->key()==Qt::Key_S)  //向左移动
     {

         ui->labelImg->move(x,y+5);

     }else if(event->key()==Qt::Key_D)  //向右移动
     {

         ui->labelImg->move(x+5,y);
     }
     if((x<=0||x>=width()-30)||(y<=0||y>=height()-30))//飞机坠毁边距
     {
         QMessageBox::critical(this,"失败","飞机已坠毁");
         ui->labelImg->move(200,150);//坠毁重生位置
     }
}

dialog.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Dialog</class>
 <widget class="QDialog" name="Dialog">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Dialog</string>
  </property>
  <widget class="QLabel" name="labelImg">
   <property name="geometry">
    <rect>
     <x>160</x>
     <y>120</y>
     <width>30</width>
     <height>30</height>
    </rect>
   </property>
   <property name="text">
    <string/>
   </property>
   <property name="pixmap">
    <pixmap resource="res.qrc">:/new/prefix1/plane.png</pixmap>
   </property>
  </widget>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources>
  <include location="res.qrc"/>
 </resources>
 <connections/>
</ui>

实现效果

Qt使用星空图作为窗口背景,点击键盘的WASD控制小飞机在上面移动。

Qt使用星空图作为窗口背景,点击键盘的WASD控制小飞机在上面移动。

 Qt使用星空图作为窗口背景,点击键盘的WASD控制小飞机在上面移动。文章来源地址https://www.toymoban.com/news/detail-500407.html

到了这里,关于Qt使用星空图作为窗口背景,点击键盘的WASD控制小飞机在上面移动。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Qt】Qt无边框窗口(鼠标点击自定义标题栏)可拖动

    隐藏掉标题栏后,默认情况下窗口无法被鼠标拖动的,需要自己处理鼠标事件,移动窗口达到拖动效果,但是又不想要鼠标点击整个窗口都可以拖动,只需要鼠标点击自定义的标题栏时可拖动 具体步骤如下: 类外初始化 通过鼠标点击事件,判断鼠标是否在标题栏,如果是,

    2024年02月12日
    浏览(31)
  • Qt窗口设置无边框不能移动,鼠标穿透后不能响应点击事件

      最近在做一个迷你小工具,准备干点不可描述的事情,想要短小强悍,始终在最顶层显示,同时不要自带的关闭按钮和边框,百度一下,发现是需要设置如下两个属性:   那么问题来了,这样的话一运行窗体就在正中间,而且无法拖动,就像这样   哪怕对于我这种

    2024年02月10日
    浏览(47)
  • Qt系列——点击按钮关闭窗口的三种实现方式,附源码

    主要实现了点击QPushButton按钮,关闭窗口的功能。 简单设计界面如下,按钮名称如图中右侧红框中内容 源程序连接

    2024年02月11日
    浏览(42)
  • 小程序使用图像作为背景

    微信小程序不支持通过background-image设置背景,因此必须使用image标签来设置背景 在 uni-app 中,可以使用 background-image 属性来将一张图像作为另一张图像的背景。 以下是一个示例代码,演示如何使用 background-image 将一张图像作为另一张图像的背景: 在上面的示例中,我们在页

    2024年02月13日
    浏览(32)
  • 前端使用视频作为背景图的方法

    通过 video + source 引入视频,并对视频播放属性进行设置,再通过 css 使视频覆盖背景即可。 👇觉得有帮助的朋友可以支持下作者哦,您的鼓励是我创作的最大动力,如有开发问题可联系作者

    2024年02月04日
    浏览(31)
  • 前端代码分享——星空背景特效(内含源码)

    打开网页效果最好哦 提供的JavaScript代码是一个名为\\\"WarpDrive\\\"的jQuery插件,它创建了一个星空动画,类似于科幻媒体(如《星际迷航》)中所看到的\\\"超光速\\\"效果。 提供的JavaScript代码是一个名为\\\"WarpDrive\\\"的jQuery插件,它创建了一个星空动画,类似于科幻媒体(如《星际迷航》)

    2024年02月14日
    浏览(35)
  • HTML5 Canvas与JavaScript携手绘制动态星空背景

    目录 一、程序代码 二、代码原理 三、运行效果 这段代码通过 HTML5 的 canvas 元素和 JavaScript 实现了一个星空背景效果。首先,它在页面加载时创建了一个全屏大小的画布,并使用 JavaScript 生成了多个具有不同运动轨道的星星对象。每颗星星都具有随机的半径、位置、运动速度

    2024年02月20日
    浏览(37)
  • 使用python向窗口发送鼠标点击命令

    今天遇到一个问题。公司让用电脑在网页上看个视频。网页有个判断:一段时间没有鼠标活动,视频就会暂停。于是就想,能否隔一段时间就模拟鼠标点击一下视频暂停,再点一下继续播放。省得它自己停止播放。这样我就可以让网页窗口在后台,我去干别的。 研究了一下,

    2024年02月12日
    浏览(28)
  • 如何使用Qt创建一个新窗口?

    如何使用Qt创建一个新窗口? 在Qt中,我们可以使用QML语言轻松创建图形界面。如果需要创建一个新的窗口,我们可以使用Qt.createComponent来创建一个新组件并将其添加到主窗口中。下面是一个简单的例子。 在这个例子中,我们创建了一个主窗口,并在其中添加了一个按钮。当

    2024年02月11日
    浏览(47)
  • C++,使用Qt设计一个登录窗口

    要求如下: 1、给窗体改变名称并设置窗口图标、尺寸固定 2、中间放log图 3、用户名和密码使用图片完成 4、账户用明文模式,密码用密文模式 5、点击登录后,将界面上的用户名和“admin”比较,密码和“123456”比较,如果匹配成功,则输出登录成功,如果匹配失败,则输出

    2024年02月12日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包