【Qt绘图】之绘制坦克

使用绘图事件,绘制坦克。

效果

效果很逼真,想象力,有没有。

示例

代码像诗一样优雅,有没有。

  • 包含头文件
cpp 复制代码
#include <QApplication>
#include <QWidget>
#include <QPainter>
  • 绘制坦克类
cpp 复制代码
class TankWidget : public QWidget
{
public:
    TankWidget(QWidget *parent = 0)
        : QWidget(parent)
    {
        setFixedSize(400, 300);
    }

protected:
    void paintEvent(QPaintEvent *)
    {
        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing, true);

        int nOffset = 0;
        for(int i = 0; i < 4; ++i)
        {
            // 绘制坦克炮筒
            painter.setPen(Qt::black);
            painter.setBrush(Qt::gray);
            painter.drawRect(90+nOffset, 100, 20, 60);

            // 绘制坦克车身
            painter.setBrush(Qt::darkGreen);
            painter.drawRect(30+nOffset, 140, 60, 20);
            painter.drawRect(40+nOffset, 120, 40, 20);

            // 绘制坦克底盘
            painter.setPen(Qt::black);
            painter.setBrush(Qt::green);
            painter.drawRect(10+nOffset, 160, 100, 40);

            // 绘制坦克履带
            painter.setPen(Qt::black);
            painter.setBrush(Qt::darkGray);

            // 履带
            painter.drawEllipse(12+nOffset, 190, 20, 20);
            painter.drawEllipse(37+nOffset, 190, 20, 20);
            painter.drawEllipse(62+nOffset, 190, 20, 20);
            painter.drawEllipse(87+nOffset, 190, 20, 20);

            nOffset += 150;
        }
    }
};
  • 调用
cpp 复制代码
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    TankWidget widget;
    widget.show();

    return app.exec();
}

分析

  • 首先,通过绘制矩形、椭圆等基本图形进行坦克的绘制。其中,通过设置画刷的颜色和绘制顺序等绘制技巧,实现了具有逼真感的坦克效果。
  • 需要注意的是,在Qt中,可以通过重载QWidget的paintEvent函数,来实现对控件的绘制操作。在paintEvent函数中,可以使用QPainter对象进行各种基本图形的绘制,并设置画笔、画刷等属性,以达到所需的效果。
  • 除此之外,还可以使用QPixmap和QImage等对象,将一幅静态的坦克图像加载到窗口中,来实现更加逼真的坦克效果。
相关推荐
Dovis(誓平步青云)32 分钟前
启元 T1 Pro 人机相声搭档:语音-触摸双通道的启元机器人节奏引擎设计
开发语言·前端·javascript·microsoft·交互
做科研的周师兄35 分钟前
【R语言实战】MixSIAR 氢氧同位素水源解析全流程:从混合空间校验到贝叶斯 MCMC 收敛诊断(后附完整代码)
java·大数据·开发语言
.痞老板.2 小时前
java ee--计算机是如何工作的
java·开发语言·java-ee
奇树谦2 小时前
Qt Quick 图片加载与 GPU 纹理机制详解:QImage、QQuickTextureFactory、QSGTexture 与异步加载
开发语言·qt·系统架构
青梅味猪大肠2 小时前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统
starzy19903 小时前
深入理解Scala可变Map:动态构建场景下的性能与设计权衡
开发语言·scala
zhanghaha13144 小时前
C# 系列教程_7 判断语句(分支)保姆级精讲
开发语言·c#
apcipot_rain5 小时前
C++转Java日记(02)
java·开发语言·c++
杜 硕5 小时前
从零开始的C++生活——第七讲——02
开发语言·c++·生活
zhanghaha13145 小时前
C# 系列教程_8 循环语句 保姆级精讲(面向新手)
开发语言·c#