开课吧-智能物联网训练营Day1-使用QT简单的构建图形程序分享与总结

开课吧-智能物联网训练营Day1-使用QT简单的构建图形程序分享与总结

Day1开发部分可以分为两个部分,一个是实现了背景图;另一个是对自定义的view和scene做了封装。
我没看回放,嗯。主要是因为懒。如有错误,敬请指正。

1. 环境介绍

Qt 5.14.2
windows 10 当然是最新的。

2. 实现背景图

2.1 建立目录结构

以下步骤会有所省略。总之QT操作比一般的IDE感觉还简单一些。
建立一个Qt Widgets Application
在这里插入图片描述
避雷:不要把项目放到中文目录下。否则会无法编译。
这里需要更改一下。类名改为MainWidget。基类选择QWidget。
注意:底下的框选取消掉
其实不取消也没啥。。我当时就没注意~
在这里插入图片描述
选择运行平台。随便选,毕竟没几个人还在用32位系统吧?建议只选一个。我比较喜欢先进的东西,所以64。
在这里插入图片描述
至此,一个项目建好了。运行效果如下
在这里插入图片描述

下面开始整理目录结构。
打开项目文件夹(你之前保存的地方)
建立src文件夹,把C++源文件和头文件拖到src里。
不要把pro和user文件拖进去了。
再把老师发的code下的代码文件全部复制到src下。把images和audio复制到项目目录(pvz)下。
最终的结果如下:
在这里插入图片描述
打开QT,会弹框,closeAll即可。
在这里插入图片描述
右键上图箭头指向处,添加现有文件,把src下的所有文件使用ctrl+a选中。加入到项目中。。
打开你的pvz.pro项目文件:
在这里插入图片描述
可以看到有些过时的信息。即不是src下的文件。删了。结果如下:
在这里插入图片描述
下一步添加资源文件。
在上一步添加现有文件的选项(右键项目弹出)中,还有一个是Add new。
在这里插入图片描述
选中Qt。Qt Resource File。Choose
文件名填pvz。
在这里插入图片描述
右键上图的文件。Add existing directory。把audio和images勾上。然后弹框,选Yes to all。
在这里插入图片描述

至此项目结构完毕。

2.2 加入一点点代码加入背景图

mainwidget.cpp的代码如下:

#include "mainwidget.h"
//注意包含以下三个个头文件。老师把后二个放在了mainwidget中了。无所谓。哪里需要哪里搬,反正不会重复包含的。
#include "ImageManager.h"
#include <QGraphicsView>
#include <QGraphicsPixmapItem>


MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
		
       //建立gameView。注意传入this指针。
       QGraphicsView *gameView = new QGraphicsView(this);

       QGraphicsScene *gameScene = new QGraphicsScene();
	   gameView->setScene(gameScene);
       QGraphicsPixmapItem *backgroundItem = new QGraphicsPixmapItem(gImageCache->load("interface/background1.jpg"));
       gameScene->addItem(backgroundItem);
}

MainWidget::~MainWidget()   
{
//可以把上面的析构了。不过老师没提。小细节。。
}


注意包含QGraphicsPixmapItem!!
为什么要这么加?这代码啥意思?
View是窗口,Scene是游戏界面?item是界面中的元素。
窗口一般是恒定的,界面和元素通常都会变化。嗯。总之我还没来得及找博客学习。所以具体是不是这个逻辑还有待查明~。
然后ImageManager还需要在main.cpp初始化。

#include "mainwidget.h"

#include <QApplication>
#include "ImageManager.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //初始化代码。
    InitImageManager();
    MainWidgt w;
    w.show();
    return a.exec();
}

看看源码就挺好懂的。运行效果:
在这里插入图片描述
嗯。为了增加宽高。可以在11行,gameView初始化后加gameView->setGeometry(0, 0, 800, 600);

至此实现部分没了。下面是对gameView和gameScene的封装~。我也没听多太仔细。方法是很简单的。写两个子类代表我们自定义的view和scene。

3 封装

点source啥的。add new。选择c++\c++ class。
在这里插入图片描述
在这里插入图片描述
第一个GameView类。注意大小写。包括进去Qwdiget和添加Q_OBJECT。基类设置为QGraphicsView。
同样的操作添加一个GameScene类。基类改为QGraphicsScene。其他设置和上面一致。
注意导入头文件。QT不够智能。不会自动导入。不过可以右键出错的地方,refactor。如果有include的选项,就选吧。挺方便的。
点开GameView的头文件。给构造函数添加一个QWiget *parent=nullptr的参数。
在这里插入图片描述
源文件当然也得更改。注意源文件别把默认值复制过去了。然后使用初始化列表初始化父类。就酱。然后
在这里插入图片描述
然后加入到MainWidget中。剩下的步骤我比较自由发挥了。。
在这里插入图片描述
然后在cpp文件中实现。
在这里插入图片描述
这样。在GameVIew的构造函数中就可以设置窗口的大小:
在这里插入图片描述
在这里插入图片描述
最终效果不变~

猜你喜欢

转载自blog.csdn.net/qq_36183810/article/details/106369715