开课吧-智能物联网训练营Day1-使用QT简单的构建图形程序分享与总结
文章目录
- 开课吧-智能物联网训练营Day1-使用QT简单的构建图形程序分享与总结
- 1. 环境介绍
- 2. 实现背景图
- 2.1 建立目录结构
- 2.2 加入一点点代码加入背景图
- 3 封装
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的构造函数中就可以设置窗口的大小:
最终效果不变~