QT拼图实验报告
QT实验报告【范本模板】
面向对象程序设计2实验报告专业:计算机科学与技术年级:2013级班级:工科1班学号:070613047姓名:黄剑波目录实验一:线程通信:门铃 (1)一、实验目的 (1)二、实验内容 (1)三、实验要求 (1)四、实验步骤 (1)五、实验源码 (2)main.cpp (2)doorbell。
h (2)doorbell.cpp (4)doorbell.qrc (7)六、实验结果与分析 (7)七、教师评价 (7)实验二:高阶多线程QtConcurrent的使用:ImageLoader (8)一、实验目的 (8)二、实验内容 (8)三、实验要求 (8)四、实验步骤 (8)五、实验源码 (9)main。
cpp (9)widget。
h (9)widget。
cpp (10)imageloader.qrc (11)六、实验结果与分析 (12)七、教师评价 (13)实验三:HTTP编程:httpTestTool (14)一、实验目的 (14)二、实验内容 (14)三、实验要求 (14)四、实验步骤 (14)五、实验源码 (15)main。
cpp (15)widget。
h (15)widget.cpp (17)六、实验结果与分析 (35)七、教师评价 (37)实验四:FTP:ftpTestTool (38)一、实验目的 (38)二、实验内容 (38)三、实验要求 (38)四、实验步骤 (38)五、实验源码 (39)main.cpp (39)widget.h (39)widget。
cpp (41)六、实验结果与分析 (48)七、教师评价 (48)实验五:TCP服务器:timeService (49)一、实验目的 (49)二、实验内容 (49)三、实验要求 (49)四、实验步骤 (49)五、实验源码 (50)main.cpp (50)timeService.h (50)timeService。
cpp (51)七、教师评价 (52)实验六:TCP:timeClient (53)一、实验目的 (53)二、实验内容 (53)三、实验要求 (53)四、实验步骤 (53)五、实验源码 (54)main.cpp (54)widget。
qt课程设计实验报告
程序设计课程设计实验报告(qt实验报告)信息科学与技术学院软件三班高文博2010050703092011年5月实验1:计算当初存入本金的钱数。
(12题)1.实验目的、要求目的:1)熟悉qt中的常用属性;2)熟悉vbox hbox模型及怎样根据需求设计控件,边框等;3)熟悉各个槽函数的使用,准确的将c++语言转换成qt语言,将控件功能与函数结合起来。
要求:1)掌握对控件的文本色,背景色等常用属性的设置。
2)掌握对控件、边框尺寸与结构的设置3)掌握对函数的设置2.实验设备笔记本电脑,已安装Qt 开发环境。
3.实验内容、步骤●先在vc++上进行编译。
●应用qt3.38进行编译,运行。
实验步骤:1)根据题目需求在草纸上画出结构图;2)根据草图用代码设计整体框架和控件;3)在qt上运行;4)运行成功后根据功能添加函数;5)在头文件中添加头文件。
6)将添加的功能函数与功能控件相连;7)分别对每个函数进行测试;8)将整个程序在qt运行调试;9)运行通过后给每个函数写注释;实验代码如下所示A (1)主框架结构代码#include"gwbsave.h"GwbSave::GwbSave(QWidget*parent,const char*name):QWidget(parent,name) {//??vBox=new QVBoxLayout(this);vBox->setMargin(5);vBox->setSpacing(5);label=new QLabel("Please input the lilv:",this,"label");vBox->addWidget(label);//??hBox=new QHBoxLayout(this);hBox->setMargin(5);hBox->setSpacing(5);vBox->addLayout(hBox);le1=new QLineEdit(this,"le1");hBox->addWidget(le1);//?,??hBox2=new QHBoxLayout(this);hBox2->setMargin(5);hBox2->setSpacing(5);vBox->addLayout(hBox2);leResult=new QLineEdit(this,"leResult");leResult->setReadOnly(true);leResult->setPaletteBackgroundColor(Qt::gray);hBox->addWidget(leResult);//аgrid=new QGridLayout(this,1,5,5,10);vBox->addLayout(grid);btnResult=new QPushButton("Result",this,"btnResult");grid->addWidget(btnResult,0,2);btnClean=new QPushButton("Clean",this,"btnClean");grid->addWidget(btnClean,0,3);btnExit=new QPushButton("Exit",this,"btnExit");grid->addWidget(btnExit,0,4);connect(btnExit,SIGNAL(clicked()),this,SLOT(close())); // connect(btnClean,SIGNAL(clicked()),this,SLOT(slotClean())); //? connect(btnResult,SIGNAL(clicked()),this,SLOT(slotExit()));//}(2)主窗体结构视图B(1)添加函数后的全部代码a头文件//#ifndef GWBSAVE_H#define GWBSAVE_H#include<qwidget.h>#include<qlayout.h>#include<qlineedit.h>#include<qpushbutton.h>#include<qlabel.h>#include<qdatetime.h>//class GwbSave:public QWidget{Q_OBJECTpublic:GwbSave(QWidget*parent=0,const char*name=0);//构造函数。
用qt实现拼图课课程设计
用qt实现拼图课课程设计一、教学目标本课程的教学目标是使学生掌握Qt编程基础,能够实现一个简单的拼图游戏。
具体目标如下:1.了解Qt的基本概念和框架。
2.掌握Qt中的常用类和函数。
3.理解事件处理和图形界面编程的基本原理。
4.能够使用Qt Creator进行项目开发。
5.能够编写简单的Qt应用程序。
6.能够设计和实现一个简单的拼图游戏。
情感态度价值观目标:1.培养学生的编程兴趣,提高学生的自主学习能力。
2.培养学生解决问题的能力,使学生能够通过编程解决实际问题。
3.培养学生的团队合作意识,使学生在团队项目中能够发挥自己的作用。
二、教学内容根据课程目标,本课程的教学内容主要包括以下几个部分:1.Qt基本概念和框架:Qt简介、Qt模块、Qt类和函数等。
2.事件处理和图形界面编程:事件处理机制、图形界面设计、常用控件等。
3.拼图游戏设计:游戏规则、界面设计、逻辑实现等。
第1周:Qt基本概念和框架。
第2周:事件处理和图形界面编程。
第3周:拼图游戏设计。
三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法:1.讲授法:用于讲解Qt的基本概念、类和函数等。
2.案例分析法:通过分析典型的拼图游戏案例,使学生掌握游戏设计的方法。
3.实验法:学生动手实践,编写和调试自己的拼图游戏。
四、教学资源教学资源包括以下几个方面:1.教材:《Qt编程入门》。
2.参考书:《Qt实战:基于Qt 5的应用程序设计》。
3.多媒体资料:课件、视频教程等。
4.实验设备:计算机、网络等。
五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分,以保证评估的客观性和公正性。
1.平时表现:包括课堂参与度、团队合作表现等,占总评的30%。
2.作业:包括编程练习和课后作业,占总评的40%。
3.考试:包括期中和期末考试,占总评的30%。
4.平时表现:积极参与课堂讨论,主动参与团队合作。
5.作业:按时完成,代码规范,能够实现功能。
6.考试:答案正确,编程能力较强,能够解决问题。
qt图形课程设计
qt图形课程设计一、课程目标知识目标:1. 学生能理解Qt图形库的基本概念,掌握其编程环境和使用方法。
2. 学生能描述Qt中常用的图形和图像类,并了解它们的功能和用途。
3. 学生能运用所学知识,创建简单的图形应用程序,实现基本的图形绘制和交互功能。
技能目标:1. 学生能够熟练使用Qt的绘图工具,如QPainter、QPen、QBrush等,进行基本图形的绘制。
2. 学生能够运用事件处理机制,实现图形界面的交互功能,如鼠标点击、键盘输入等。
3. 学生能够运用Qt的资源系统,加载和管理图像资源,提高应用程序的视觉效果。
情感态度价值观目标:1. 学生培养对图形编程的兴趣,激发创新意识和探索精神。
2. 学生通过团队协作,培养沟通能力和解决问题的能力。
3. 学生在学习过程中,认识到计算机图形学在现实生活中的应用和价值,增强实践意识。
课程性质:本课程为信息技术学科选修课程,以实践操作为主,注重培养学生的动手能力和实际应用能力。
学生特点:学生处于高年级阶段,已经具备一定的编程基础和逻辑思维能力,对图形编程有一定兴趣。
教学要求:结合学生特点和课程性质,采用任务驱动法,引导学生通过实践操作,掌握Qt图形编程的基本方法和技巧。
在教学过程中,注重分层教学,满足不同层次学生的学习需求。
同时,关注学生的情感态度价值观的培养,提高他们的综合素质。
通过本课程的学习,使学生能够具备Qt图形编程的基本能力,为后续相关课程的学习奠定基础。
二、教学内容1. Qt图形库概述- 了解Qt的发展历程、特点及应用领域- 掌握Qt的编程环境搭建和基本使用方法2. 基本图形绘制- 学习QPainter、QPen、QBrush等绘图工具的使用方法- 练习绘制基本图形(如矩形、椭圆、线条等)3. 图像显示与处理- 了解Qt中的图像类(如QImage、QPixmap等)- 学习图像的加载、显示、缩放和旋转等操作4. 事件处理与交互- 掌握事件处理机制,如鼠标事件、键盘事件等- 实现图形界面的交互功能,如拖拽、点击等5. 资源管理与使用- 学习Qt资源系统,如qrc文件的使用- 掌握图像资源的加载、管理和使用方法6. 综合应用案例- 分析并实现一个简单的图形应用程序,如画图板、迷宫游戏等- 结合所学知识,进行项目实践,提高综合运用能力教学内容安排和进度:第1周:Qt图形库概述及编程环境搭建第2周:基本图形绘制第3周:图像显示与处理第4周:事件处理与交互第5周:资源管理与使用第6周:综合应用案例教材章节关联:第1章:Qt图形库基础第2章:基本图形绘制第3章:图像显示与处理第4章:事件处理与交互第5章:资源管理与使用第6章:综合应用案例教学内容的选择和组织遵循科学性和系统性原则,以课程目标为依据,注重理论与实践相结合,使学生能够循序渐进地掌握Qt图形编程的相关知识和技能。
qt画图实验报告doc
qt画图实验报告篇一:QT综合作业实验报告一、实验目的1,了解并掌握Qt集成开发环境下使用Qt Designer 开发图形界面程序的流程和相关操作;2,了解并掌握Qt的信号槽和信号传递机制,并通过具体应用加深理解;3,了解并掌握使Qt应用程序支持中文或国际化的方法,并在本次实验中使用; 4,了解并掌握QPainter的translate、shear等库函数的使用方法和Widget类的使用方法,并通过本次实验加深理解;5,掌握在Qt Designer界面上为菜单项添加工具栏按钮、创建相应槽函数的方法; 6,了解并掌握使用双缓冲机制绘图的方法。
二、实验环境操作系统:Windows 7应用软件:Qt Creator开发平台:qt-sdk-win-opensource-XX.04三、程序流程图:四、核心源代码mainwindow.cpp的内容(实现菜单项的功能和绘图功能的调用)#include "mainwindow.h"#include "ui_mainwindow.h"#include "donewdialog.h"#include#include#include#include "aboutdialog.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this);setWindowTitle(tr("Qt绘图板"));setFixedSize(700,500); //主窗口大小设为700*500area = new PaintArea;scrollArea = new QScrollArea;scrollArea->setBackgroundRole(QPalette::Dark); //scrollArea对象的背景色设为Dark scrollArea->setWidget(area); //将画布添加到scrollArea中scrollArea->widget()->setMinimumSize(800,600); //scrollArea初始化大小设为800*600ui->dockWidget->hide();setCentralWidget(scrollArea); //将scrollArea加入到主窗口的中心区isSaved = false;curFile = tr("未命名.png");creatColorComboBox(ui->penColorComboBox); //画笔颜色组合框creatColorComboBox(ui->brushColorComboBox); //填充颜色组合框}MainWindow::~MainWindow(){delete ui;}void MainWindow::changeEvent(QEvent *e){QMainWindow::changeEvent(e);switch (e->type()) {case QEvent::LanguageChange:ui->retranslateUi(this);break;default:break;}void MainWindow::doOpen(){if (maybeSave()){QString fileName = QFileDialog::getOpenFileName(this,tr("打开文件"), QDir::currentPath());if (!fileName.isEmpty()){area->openImage(fileName);scrollArea->widget()->resize(area->getImageSize());//获得图片的大小,然后更改scrollArea的大小isSaved = true;curFile = fileName;}}void MainWindow::doNew(){if(maybeSave()){DoNewDialog dlg;if(dlg.exec() == QDialog::Accepted){int width = dlg.getWidth();int height = dlg.getHeight();area->setImageSize(width,height); scrollArea->widget()->resize(width,height); area->setImageColor(dlg.getBackColor()); isSaved = false;}}bool MainWindow::maybeSave(){if(area->isModified()){QMessageBox::StandardButton box;box = QMessageBox::warning(this,tr("保存文件"),tr("图片已经改变,是否保存?"), QMessageBox::Yes|QMessageBox::No|QMessageBox::Cance l);if(box == QMessageBox::Yes){return doFileSave();}else if(box == QMessageBox::Cancel){return false;}return true;}bool MainWindow::doFileSave(){if(isSaved){return saveFile(curFile);}else return doFileSaveAs();}bool MainWindow::saveFile(QString fileName) {if(area->saveImage(fileName,"png"))篇二:C++实验报告-QT PaintPad《面向对象程序设计与C++》实验报告报告创建时间:篇三:QT实验五QT绘图基础实验QT绘图基础实验(一)编程绘图实现显示时钟窗口使用定时器和QPAINTER类绘制时钟,包括使用刷子、画笔、定义坐标旋转、刻度定义、画线等函数,完成时钟实时显示。
qt实验报告
嵌入式系统界面设计实验实验题目:基于Qt的图片表格转换学院: **学院专业:电子信息工程班级:学号:姓名:小组成员:编写日期: 2019.10目录1. 实验设计背景 (1)2. 实验设计目的 (1)3. 实验设计环境 (1)4. 实验系统需求分析 (1)4.1 系统调查 (1)4.2 用户需求 (2)4.3 可行性分析 (2)4.4 系统业务流程图 (3)5. 实验具体操作步骤及方法 (3)5.1 程序运行开始主界面 (3)5.2 用户修改界面 (4)5.3 最终生成表格 (4)6. 实验结果分析 (5)7. 实验效果图 (6)8. 实验设计具体任务分工 (6)9. 实验设计心得体会 (6)1.实验设计背景当今办公室中有不少的表格是基于图片的这给后期人员的校对处理带来了不少的麻烦,特别是列数较多行数较多的表格。
在将表通过人工的方法转换为Excel 表格时容易出现差错,表格行列错位、数据抄错等等问题。
长时间的工作还容易损害校对人员的健康。
2.实验设计目的1.将表格分解成小片,以便于人工填写2.尽可能的通过软件将图片数字转换为文字3.Excel表格导出3.实验设计环境Visual Studio CodePython 3.7Python包:Pytesseract、openpyxl、numpy、cv2Qt CreaterTesseract-OCR4.实验系统需求分析4.1系统调查在许多小公司的办公中,由于大多业务系统都是使用的通用的模板,没有对具体情形进行优化,以及以前未使用办公系统的历史遗留问题,在实际的办公中经常会出现大量图像表格,需要人为地输入到EXCEL表格中以用于后续公司的各项统计工作4.2用户需求将PNG、JPG、BMP等格式的图片表格转化为EXCEL 的数字表格方便后续的统计工作4.3可行性分析Python中中存在大量的用于图像处理的库opencv等可以方便地对图像表格进行处理分割成小块。
qt画图实验报告
qt画图实验报告篇一:QT时钟实验报告实验报告书实验名称:qmainwindow程序设计专业班级:6学号:姓名:陈俊宇潘耀斌联系电话:指导老师:谭智实验时间:—计算机科学与工程学院计算机实验室(中心)1设计分析qmainwindow程序设计对qmainwindow类窗口进行分析,qmainwindow类是一个经常用到的类,为用户提供了一个主窗口程序,可包含一个菜单条,一个工具栏,一个状态条以及一个中央窗体,是许多应用程序的基础,,如文本编辑器,图片浏览器都是以qmainwindow为基础实现的。
本次程序设计,首先分析了一个基本的窗口程序的实现,只包含基本的菜单和工具栏,实现了基本的窗口功能,如打开、新建等。
2功能需求实现一个基本的窗口程序,包括一个菜单条,一个工具栏,中央可编辑窗体及状态栏。
实现的效果如图所示。
在编写文本编辑器等应用中,需要对文本进行排序,以列表的方式显示各段文本。
即实现文本的排序功能,并实现文本的对齐及撤销和恢复功能,如图所示。
在编辑框中任意输入几段文字,单击工具栏上的下拉列表框,选择排序方式,则光标所在的文本段以所选排序方式自动缩进排序显示,并且紧接着的文本段以同样的方式排列;工具栏中部的4个快捷按钮实现文本的对齐功能,分别为左对齐,右对齐、居中和两端对齐;工具栏右部的快捷按钮实现文本操作的前进/回退功能。
3程序源代码###include#include#include#include#include#include#include#includemainwindow::mainwindow(qwid get*parent):qmainwindow(parent),ui(newui::mainwindow){ui->setupui(this);issaved=fal se;curfile=tr(noname);ui->action_left->setcheckable(true);ui->action_righ t->setcheckable(true);ui->action_justift->setchecka ble(true);ui->action_center->setcheckable(true);/*w orkspace=newqworkspace;setcentralwidget(workspace); createmenu();qmainwindow*window1=newqmainwindow;qmainwindow*wind ow2=newqmainwindow;qmainwindow*window3=newqmainwind ow;window1->setwindowtitle(tr(windowi));window2->se twindowtitle(tr(windowii));window3->setwindowtitle(tr(windowiii));qtextedit*edit1=newqtextedit;qtexted it*edit2=newqtextedit;qtextedit*edit3=newqtextedit; edit1->settext(tr(window1));edit2->settext(tr(windo w2));edit3->settext(tr(window3));window1->setcentra lwidget(edit1);window2->setcentralwidget(edit2);win dow3->setcentralwidget(edit3);workspace->addwindow( window1);workspace->addwindow(window2);workspace->a ddwindow(window3);*/[root@localhostopt]#三、实验总结篇三:用qt实现桌面时钟设计.doc附件二【学生用】西北农林科技大学信息工程学院面向对象实习实习报告题学号姓名专业班级指导教师实践日期目:桌面时钟设计与实现目录一、综合训练目的与要求................................................. ............................合训练任务................................................. ........................................................................... .....1三、总体设计................................................. ........................................................................... .............2四、详细设计说明................................................. ........................................................................... .....4五、调试与测试................................................. .....................................5六、实习日志................................................. ........................................................................... .............9七、实习总结................................................. ........................................................................... .............9八、附录:核心代码清单................................................. ............................ (9)一、综合训练目的与要求正文这次面向对象实习实践活动是在c++面向对象程序设计之后进行的实践环节旨在加深对面向对象编程的设计思想(类的设计,抽象,封装,包含与继承,多态性,uml图)的理解,掌握使用c++编程的基本的技能,从而能通过小型的团队开发一些小软件的实现与设计,并能够解决一定的实际问题。
图像拼接实验报告
图像拼接一、实验原理及实验结果图像拼接就是将一系列针对同一场景的有重叠部分的图片拼接成整幅图像,使拼接后的图像最大程度地与原始场景接近,图像失真尽可能小。
基于SIFT算法则能够对图像旋转、尺度缩放、亮度变化保持不变性,对视角变化,仿射变换,噪声也能保持一定程度的稳定性。
本次实验运用SIFT匹配算法来提取图像的特征点,采用随机抽样一致性算法求解单应性矩阵并剔除错误的匹配对。
最后用加权平均融合法将两帧图像进行拼接。
具体过程为:首先选取具有重叠区域的两帧图像分别作为参考图像和待拼接图像,然后使用特征提取算法提取特征点,并计算特征点描述子,根据描述子的相似程度确定互相匹配的特征点对。
再根据特征点对计算出待拼接图像相对于参考图像的单应性矩阵,并运用该矩阵对待拼接图像进行变换,最后将两帧图像进行融合,得到拼接后的图像。
1.特征点检测与匹配特征点检测与匹配中的尺度空间理论的主要思想就是利用高斯核对原始图像进行尺度变换,获得图像多尺度下的尺度空间表示序列,再对这些序列就行尺度空间的特征提取。
二维的高斯核定义为:G(x,y,σ)=12πσ2e−(x2+y2)2σ2⁄对于二维图像I(x,y),在不同尺度σ下的尺度空间表示I(x,y,σ)可由图像I(x,y)与高斯核的卷积得到:L(x,y,σ)=G(x,y,σ)∗I(x,y)其中,*表示在x 和 y方向上的卷积,L表示尺度空间,(x,y)代表图像I上的点。
为了提高在尺度空间检测稳定特征点的效率,可以利用高斯差值方程同原图像进行卷积来求取尺度空间极值:D(x,y,σ)=(G(x,y,kσ)−G(x,y,σ))∗I(x,y)= L(x,y,kσ)−L(x,y,σ)其中k为常数,一般取k=√2。
SIFT算法将图像金字塔引入了尺度空间,首先采用不同尺度因子的高斯核对图像进行卷积以得到图像的不同尺度空间,将这一组图像作为金字塔图像的第一阶。
接着对其中的2倍尺度图像(相对于该阶第一幅图像的2倍尺度)以2倍像素距离进行下采样来得到金字塔图像第二阶的第一幅图像,对该图像采用不同尺度因子的高斯核进行卷积,以获得金字塔图像第二阶的一组图像。
MFC课程设计之拼图游戏设计报告
拼图游戏实验报告一、实验目的1、通过实践加强对程序设计语言课程知识点的理解和掌握,培养对课程知识综合运用能力、实际分析问题能力及编程能力,养成良好的编程习惯。
2、通过实践进一步领会程序设计的特点和应用,提高运用C++ 以及面向对象知识解决实际问题的能力,初步掌握MFC变成的基本功能。
3、通过实践掌握用C++ 编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识;学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力,为后续的相关课程的学习打下基础。
二、小组分工为了发挥组内同学的各自特长,我们小组分工如下:1、苏嘉彬——前期进行系统需求分析,系统结构设计,完成拼图界面的设计工作,后期完成课程设计报告2、嵇鹏飞(组长)——完成主要程序的编写工作(图形分割、存储、拼图)3、依代吐力·艾尼——搜集资料,完成计时器的设计工作,软件接口的设计及测试三、程序设计思路1、初步方案讨论拼图游戏是同学们喜欢的益智游戏之一,带着浓厚的兴趣,我们选择拼图游戏设计作为我们小组本次MFC课程设计的课题。
在讨论中,有的同学希望用单文档(SDI)的形式完成本次设计,有的同学则偏向于用对话框(Dialogue)的形式,最终我们小组讨论决定最终的设计采用对话框形式实现拼图功能。
2、方案变更、疑难解决(1)最初我们决定采用对话框形式来实现拼图的基本功能,但是在实施过程中出现了几次很严重的错误:Debug Assertion Failed,缺少ivewers.dll文件等等,在最后的尝试中我们发现如果采用单文档(SDI)形式写拼图的话,可以实现最基本的功能,因此我们最终决定使用单文档来完成该课程设计。
(2)一开始我们讨论决定采用的方式是将位图读入后再进行图片的分割,而在实际的操作过程中由于图片的分割有一定的困难,因此我们最后采用的方式是将位图进行分割完毕后再逐个用Brush在指定位置上进行绘画,实现图形的分割。
qt画图实验报告
qt画图实验报告篇一:QT综合作业实验报告一、实验目的1,了解并掌握Qt集成开发环境下使用Qt Designer 开发图形界面程序的流程和相关操作;2,了解并掌握Qt的信号槽和信号传递机制,并通过具体应用加深理解;3,了解并掌握使Qt应用程序支持中文或国际化的方法,并在本次实验中使用; 4,了解并掌握QPainter的translate、shear等库函数的使用方法和Widget类的使用方法,并通过本次实验加深理解;5,掌握在Qt Designer界面上为菜单项添加工具栏按钮、创建相应槽函数的方法; 6,了解并掌握使用双缓冲机制绘图的方法。
二、实验环境操作系统:Windows 7应用软件:Qt Creator开发平台:qt-sdk-win-opensource-XX.04三、程序流程图:四、核心源代码mainwindow.cpp的内容(实现菜单项的功能和绘图功能的调用)#include "mainwindow.h"#include "ui_mainwindow.h"#include "donewdialog.h"#include#include#include#include "aboutdialog.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this);setWindowTitle(tr("Qt绘图板"));setFixedSize(700,500); //主窗口大小设为700*500area = new PaintArea;scrollArea = new QScrollArea;scrollArea->setBackgroundRole(QPalette::Dark); //scrollArea对象的背景色设为DarkscrollArea->setWidget(area); //将画布添加到scrollArea中scrollArea->widget()->setMinimumSize(800,600); //scrollArea初始化大小设为800*600ui->dockWidget->hide();setCentralWidget(scrollArea); //将scrollArea加入到主窗口的中心区isSaved = false;curFile = tr("未命名.png");creatColorComboBox(ui->penColorComboBox); //画笔颜色组合框creatColorComboBox(ui->brushColorComboBox); //填充颜色组合框}MainWindow::~MainWindow(){delete ui;}void MainWindow::changeEvent(QEvent *e){QMainWindow::changeEvent(e);switch (e->type()) {case QEvent::LanguageChange:ui->retranslateUi(this);break;default:break;}}void MainWindow::doOpen(){if (maybeSave()){QString fileName = QFileDialog::getOpenFileName(this,tr("打开文件"), QDir::currentPath());if (!fileName.isEmpty()){area->openImage(fileName);scrollArea->widget()->resize(area->getImageSize());//获得图片的大小,然后更改scrollArea的大小isSaved = true;curFile = fileName;}}}void MainWindow::doNew(){if(maybeSave()){DoNewDialog dlg;if(dlg.exec() == QDialog::Accepted){int width = dlg.getWidth();int height = dlg.getHeight();area->setImageSize(width,height); scrollArea->widget()->resize(width,height); area->setImageColor(dlg.getBackColor()); isSaved = false;}}}bool MainWindow::maybeSave(){if(area->isModified()){QMessageBox::StandardButton box;box = QMessageBox::warning(this,tr("保存文件"),tr("图片已经改变,是否保存?"), QMessageBox::Yes|QMessageBox::No|QMessageBox::Cance l);if(box == QMessageBox::Yes){return doFileSave();}else if(box == QMessageBox::Cancel){return false;}}return true;}bool MainWindow::doFileSave(){if(isSaved){return saveFile(curFile);}else return doFileSaveAs();}bool MainWindow::saveFile(QString fileName){if(area->saveImage(fileName,"png"))篇二:C++实验报告-QT PaintPad《面向对象程序设计与C++》实验报告报告创建时间:篇三:QT实验五QT绘图基础实验QT绘图基础实验(一)编程绘图实现显示时钟窗口使用定时器和QPAINTER类绘制时钟,包括使用刷子、画笔、定义坐标旋转、刻度定义、画线等函数,完成时钟实时显示。
qt课程设计绘报告
qt课程设计绘报告一、课程目标知识目标:1. 让学生掌握Qt图形用户界面设计的基本原理,理解其编程模式和事件处理机制。
2. 使学生能够运用Qt进行窗口、控件和布局的设计,并能实现基本的人机交互功能。
3. 帮助学生了解Qt中的信号与槽机制,掌握其在图形界面编程中的应用。
技能目标:1. 培养学生运用Qt进行界面设计的能力,能够独立完成简单图形用户界面的编写。
2. 提高学生的问题解决能力,使其在遇到界面设计问题时,能够运用所学知识进行有效解决。
3. 培养学生的团队协作能力,学会在项目中进行分工与合作,共同完成复杂的图形用户界面设计。
情感态度价值观目标:1. 激发学生对图形用户界面设计的兴趣,培养其主动学习和探索的精神。
2. 培养学生关注用户需求,注重用户体验,提高其审美观念和设计品味。
3. 引导学生认识到图形用户界面设计在软件开发中的重要性,增强其职业责任感。
课程性质:本课程为实践性较强的课程,注重培养学生的动手能力和实际操作能力。
学生特点:学生具备一定的编程基础,对图形用户界面设计有一定了解,但实际操作能力有待提高。
教学要求:结合课本内容,以案例教学为主,注重理论与实践相结合,培养学生的实际操作能力。
在教学过程中,关注学生的个体差异,鼓励学生提问和讨论,提高其问题解决能力。
同时,注重培养学生的团队协作精神,提高其综合素质。
通过本课程的学习,使学生能够达到上述课程目标,为今后的软件开发工作打下坚实基础。
二、教学内容本课程教学内容分为五个部分,确保学生能够系统地掌握Qt图形用户界面设计的相关知识。
1. Qt基本概念与编程环境:介绍Qt的发展历程、特点及编程环境搭建,使学生了解Qt的基本框架和编程模式。
教材章节:第一章.Qt概述与安装内容:Qt发展历程、特点、安装与配置、第一个Qt程序。
2. Qt基本控件与布局:讲解Qt中的常用控件及其属性设置,学习布局管理器,使学生能够进行基本的界面设计。
教材章节:第二章.Qt基本控件与布局内容:按钮、文本框、标签、布局管理器等控件的使用。
qt课程设计报告
qt课程设计报告一、课程目标知识目标:1. 学生能够理解并掌握Qt编程基础,包括基本语法、数据类型、变量和常量的使用。
2. 学生能够掌握Qt中的事件处理机制,并能运用到实际项目中。
3. 学生能够熟练运用Qt中的布局管理器,实现界面组件的合理布局。
4. 学生能够掌握Qt中的信号与槽机制,实现组件间的通信。
技能目标:1. 学生能够运用Qt Creator开发环境,创建、调试和运行简单的Qt应用程序。
2. 学生能够运用所学知识,设计和实现具有基本功能的桌面应用程序。
3. 学生能够运用Qt中的绘图工具,实现自定义图形的绘制。
4. 学生能够运用Qt中的文件操作,实现数据的读写和存储。
情感态度价值观目标:1. 培养学生对编程的兴趣和热情,提高其学习主动性和积极性。
2. 培养学生的团队协作精神,使其在项目实践中学会与他人合作、沟通。
3. 培养学生的创新意识和问题解决能力,鼓励其在编程过程中积极思考、勇于尝试。
4. 培养学生遵循编程规范,养成良好的编程习惯。
本课程针对五年级学生,结合Qt编程语言的特点,注重实践性和实用性。
在教学过程中,充分考虑学生的年龄特点,采用生动的案例和趣味性的教学方式,激发学生的学习兴趣。
课程目标分解为具体的学习成果,以便教师在教学设计和评估过程中能够有针对性地进行指导,确保学生达到预期学习效果。
二、教学内容1. Qt编程基础:- 环境搭建与Qt Creator使用- 基本语法、数据类型、变量与常量- 运算符、表达式和语句2. Qt事件处理机制:- 事件类型与事件处理函数- 信号与槽机制- 事件过滤器3. 布局管理器:- 布局管理器概述- 线性布局、网格布局、表单布局等- 自定义布局4. 组件与容器:- 常用组件的使用(按钮、文本框、标签等)- 容器组件(盒子布局、栈等)- 组件属性设置与样式定制5. 绘图与动画:- QPainter绘图- QPixmap与QBitmap- 基本动画效果实现6. 文件操作与数据存储:- 文件读写- QDomDocument与XML文件操作- 数据库操作(SQLite)7. 实践项目:- 设计并实现一个简易计算器- 设计并实现一个简单的记事本应用- 设计并实现一个动画效果展示本教学内容根据课程目标制定,涵盖Qt编程的基本概念、核心技术及实践应用。
QT综合作业实验报告
一、实验目的1,了解并掌握Qt集成开发环境下使用Qt Designer开发图形界面程序的流程和相关操作;2,了解并掌握Qt的信号槽和信号传递机制,并通过具体应用加深理解;3,了解并掌握使Qt应用程序支持中文或国际化的方法,并在本次实验中使用;4,了解并掌握QPainter的translate、shear等库函数的使用方法和Widget类的使用方法,并通过本次实验加深理解;5,掌握在Qt Designer界面上为菜单项添加工具栏按钮、创建相应槽函数的方法;6,了解并掌握使用双缓冲机制绘图的方法。
二、实验环境操作系统:Windows 7应用软件:Qt Creator开发平台:qt-sdk-win-opensource-2009.04三、程序流程图:四、核心源代码mainwindow.cpp的内容(实现菜单项的功能和绘图功能的调用) #include "mainwindow.h"#include "ui_mainwindow.h"#include "donewdialog.h"#include <QMessageBox>#include <QFileDialog>#include <QPainter>#include "aboutdialog.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this);setWindowTitle(tr("Qt绘图板"));setFixedSize(700,500); //主窗口大小设为700*500area = new PaintArea;scrollArea = new QScrollArea;scrollArea->setBackgroundRole(QPalette::Dark); //scrollArea对象的背景色设为Dark scrollArea->setWidget(area); //将画布添加到scrollArea中scrollArea->widget()->setMinimumSize(800,600); //scrollArea初始化大小设为800*600ui->dockWidget->hide();setCentralWidget(scrollArea); //将scrollArea加入到主窗口的中心区isSaved = false;curFile = tr("未命名.png");creatColorComboBox(ui->penColorComboBox); //画笔颜色组合框creatColorComboBox(ui->brushColorComboBox); //填充颜色组合框}MainWindow::~MainWindow(){delete ui;}void MainWindow::changeEvent(QEvent *e){QMainWindow::changeEvent(e);switch (e->type()) {case QEvent::LanguageChange:ui->retranslateUi(this);break;default:break;}}void MainWindow::doOpen(){if (maybeSave()){QString fileName = QFileDialog::getOpenFileName(this,tr("打开文件"), QDir::currentPath());if (!fileName.isEmpty()){area->openImage(fileName);scrollArea->widget()->resize(area->getImageSize());//获得图片的大小,然后更改scrollArea的大小isSaved = true;curFile = fileName;}}}void MainWindow::doNew()if(maybeSave()){DoNewDialog dlg;if(dlg.exec() == QDialog::Accepted){int width = dlg.getWidth();int height = dlg.getHeight();area->setImageSize(width,height);scrollArea->widget()->resize(width,height);area->setImageColor(dlg.getBackColor());isSaved = false;}}}bool MainWindow::maybeSave(){if(area->isModified()){QMessageBox::StandardButton box;box = QMessageBox::warning(this,tr("保存文件"),tr("图片已经改变,是否保存?"), QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel);if(box == QMessageBox::Yes){return doFileSave();}else if(box == QMessageBox::Cancel){return false;}}return true;}bool MainWindow::doFileSave(){if(isSaved){return saveFile(curFile);}else return doFileSaveAs();}bool MainWindow::saveFile(QString fileName){if(area->saveImage(fileName,"png"))isSaved = true;return true;}else return false;}bool MainWindow::doFileSaveAs(){QString fileName = QFileDialog::getSaveFileName(this,tr("另存为"),curFile); if(fileName.isEmpty()){return false;}else return saveFile(fileName);}void MainWindow::on_action_N_triggered() //新建菜单{doNew();}void MainWindow::on_action_O_triggered() //打开菜单{doOpen();}void MainWindow::on_action_S_triggered() //保存菜单{doFileSave();}void MainWindow::on_action_A_triggered() //另存为菜单{doFileSaveAs();}void MainWindow::on_action_X_triggered() //退出菜单{if(maybeSave())qApp->quit();}void MainWindow::closeEvent(QCloseEvent *event) //关闭事件{if(maybeSave())qApp->quit();else event->ignore();}void MainWindow::on_action_P_triggered() //打印菜单{area->doPrint();}void MainWindow::on_action_4_triggered() //放大菜单{area->zoomIn();scrollArea->widget()->resize(area->getImageSize());//获得图片的大小,然后更改scrollArea的大小}void MainWindow::on_action_5_triggered() //缩小菜单{area->zoomOut();}void MainWindow::on_action_6_triggered() //还原菜单{area->zoom_1();}void MainWindow::on_action_7_triggered() //旋转菜单{area->doRotate();}void MainWindow::on_action_8_triggered() //拉伸菜单{area->doShear();}void MainWindow::on_action_10_triggered() //清空菜单{area->doClear();}void MainWindow::on_action_11_triggered() //绘图工具栏菜单{ui->dockWidget->show();}void MainWindow::creatColorComboBox(QComboBox *comboBox){QPixmap pix(16,16);QPainter painter(&pix);painter.fillRect(0,0,16,16,Qt::black); //先绘制一个16*16的小图片,然后给其涂色comboBox->addItem(QIcon(pix),tr("黑色"),Qt::black); //再用该图片作为组合框条目的图标painter.fillRect(0,0,16,16,Qt::white);comboBox->addItem(QIcon(pix),tr("白色"),Qt::white);painter.fillRect(0,0,16,16,Qt::red);comboBox->addItem(QIcon(pix),tr("红色"),Qt::red);painter.fillRect(0,0,16,16,Qt::green);comboBox->addItem(QIcon(pix),tr("绿色"),Qt::green);painter.fillRect(0,0,16,16,Qt::blue);comboBox->addItem(QIcon(pix),tr("蓝色"),Qt::blue);painter.fillRect(0,0,16,16,Qt::yellow);comboBox->addItem(QIcon(pix),tr("黄色"),Qt::yellow);comboBox->addItem(tr("无颜色"),Qt::transparent); //即透明}void MainWindow::on_shapeComboBox_currentIndexChanged(QString shape) //选择图形组合框{if(shape == tr("无"))area->setShape(PaintArea::None); //利用PaintArea类中的枚举变量else if(shape == tr("矩形"))area->setShape(PaintArea::Rectangle);else if(shape == tr("直线"))area->setShape(PaintArea::Line);else if(shape == tr("椭圆"))area->setShape(PaintArea::Ellipse);}void MainWindow::on_penStyleComboBox_currentIndexChanged(QString style) //画笔风格组合框{if(style == tr("实线")){area->setPenStyle(Qt::SolidLine);}else if(style == tr("虚线")){area->setPenStyle(Qt::DotLine);}}void MainWindow::on_penWidthSpinBox_valueChanged(int width) //画笔线宽组合框{area->setPenWidth(width);}void MainWindow::on_penColorComboBox_currentIndexChanged(int index) //画笔颜色组合框{QColor color =ui->penColorComboBox->itemData(index,Qt::UserRole).value<QColor>();area->setPenColor(color);}void MainWindow::on_brushColorComboBox_currentIndexChanged(int index) //填充颜色组合框{QColor color =ui->brushColorComboBox->itemData(index,Qt::UserRole).value<QColor>(); area->setBrushColor(color);}void MainWindow::on_action_12_triggered() //关于对话框的实现{AboutDialog abdlg;abdlg.show();if(abdlg.exec()!=QDialog::Accepted)abdlg.show();}void MainWindow::on_action_2_triggered() //选择直线{area->setShape(PaintArea::Line); //利用PaintArea类中的枚举变量}void MainWindow::on_action_3_triggered() //选择无{area->setShape(PaintArea::None);}void MainWindow::on_action_9_triggered() //选择矩形{area->setShape(PaintArea::Rectangle);}void MainWindow::on_action_13_triggered() //选择椭圆{area->setShape(PaintArea::Ellipse);}void MainWindow::on_action_14_triggered() //选择实线{area->setPenStyle(Qt::SolidLine);}void MainWindow::on_action_15_triggered() //选择虚线{area->setPenStyle(Qt::DotLine);}paintarea.cpp的内容(实现双缓冲绘图并提供绘图接口的调用)#include "paintarea.h"#include <QPainter>#include <QPrintDialog>#include <QPrinter>PaintArea::PaintArea(){image = QImage(400,300,QImage::Format_RGB32); //画布的初始化大小设为400*300,使用32位颜色backColor = qRgb(255,255,255); //画布初始化背景色使用白色image.fill(backColor);modified = false;scale = 1;angle = 0;shear = 0;penColor = Qt::black;brushColor = Qt::black;penWidth = 1;penStyle = Qt::SolidLine;curShape = None;isDrawing = false;}void PaintArea::paintEvent(QPaintEvent *){QPainter painter(this);painter.scale(scale,scale);if(isDrawing) //如果正在绘制特殊图形,则显示临时绘图区上的内容{painter.drawImage(0,0,tempImage);}else{if(angle){QImage copyImage = image; //新建临时的copyImage,利用它进行旋转操作QPainter pp(©Image);QPointF center(copyImage.width()/2.0,copyImage.height()/2.0);pp.translate(center);pp.rotate(angle);pp.translate(-center);pp.drawImage(0,0,image);image = copyImage; //只会复制图片上的内容,不会复制坐标系统angle = 0; //完成旋转后将角度值重新设为0}if(shear){QImage copyImage = image;QPainter pp(©Image);pp.shear(shear,shear);pp.drawImage(0,0,image);image = copyImage;shear = 0;}painter.drawImage(0,0,image);}}void PaintArea::mousePressEvent(QMouseEvent *event){if(event->button() == Qt::LeftButton) //当鼠标左键按下{lastPoint = event->pos(); //获得鼠标指针的当前坐标作为起始坐标isDrawing = true;}}void PaintArea::mouseMoveEvent(QMouseEvent *event){if(event->buttons()&Qt::LeftButton) //如果鼠标左键按着的同时移动鼠标{endPoint = event->pos(); //获得鼠标指针的当前坐标作为终止坐标if(curShape == None) //如果不进行特殊图形绘制,则直接在image上绘制{isDrawing = false;paint(image);}else //如果绘制特殊图形,则在临时绘图区tempImage上绘制{tempImage = image; //每次绘制tempImage前用上一次image中的图片对其进行填充paint(tempImage);}}}void PaintArea::mouseReleaseEvent(QMouseEvent *event){if(event->button() == Qt::LeftButton) //如果鼠标左键释放{endPoint = event->pos();isDrawing = false;paint(image);}}void PaintArea::paint(QImage &theImage){QPainter pp(&theImage); //在theImage上绘图QPen pen = QPen();pen.setColor(penColor);pen.setStyle(penStyle);pen.setWidth(penWidth);QBrush brush = QBrush(brushColor);pp.setPen(pen);pp.setBrush(brush);int x,y,w,h;x = lastPoint.x()/scale;y = lastPoint.y()/scale;w = endPoint.x()/scale - x;h = endPoint.y()/scale - y;switch(curShape){case None:{pp.drawLine(lastPoint/scale,endPoint/scale); //由起始坐标和终止坐标绘制直线lastPoint = endPoint; //让终止坐标变为起始坐标break;}case Line:{pp.drawLine(lastPoint/scale,endPoint/scale);break;}case Rectangle:{pp.drawRect(x,y,w,h);break;}case Ellipse:{pp.drawEllipse(x,y,w,h);break;}}update(); //进行更新界面显示,可引起窗口重绘事件,重绘窗口modified = true;}void PaintArea::setImageSize(int width, int height){QImage newImage(width,height,QImage::Format_RGB32);image = newImage;update();}void PaintArea::setImageColor(QColor color){backColor = color.rgb(); //因为image的背景色要用QRgb类型的颜色,所以这里进行了一下转换image.fill(backColor);update();}bool PaintArea::saveImage(const QString &fileName, const char *fileFormat) {QImage visibleImage = image;if (visibleImage.save(fileName, fileFormat)) //实现了文件存储{modified = false;return true;}else{return false;}}bool PaintArea::openImage(const QString &fileName){QImage loadedImage;if (!loadedImage.load(fileName))return false;QSize newSize = loadedImage.size();setImageSize(newSize.width(),newSize.height());image = loadedImage;modified = false;update();return true;}QSize PaintArea::getImageSize(){return image.size()*scale;}void PaintArea::doPrint(){QPrinter printer(QPrinter::HighResolution);QPrintDialog *printDialog = new QPrintDialog(&printer, this);if (printDialog->exec() == QDialog::Accepted){QPainter painter(&printer);QRect rect = painter.viewport();QSize size = image.size();size.scale(rect.size(), Qt::KeepAspectRatio);painter.setViewport(rect.x(), rect.y(), size.width(), size.height()); painter.setWindow(image.rect());painter.drawImage(0, 0, image);}}void PaintArea::zoomIn(){scale*=1.2;update();}void PaintArea::zoomOut(){scale/=1.2;update();}void PaintArea::zoom_1(){scale = 1;update();}void PaintArea::doRotate(){angle +=90;update();}void PaintArea::doShear(){shear = 0.2;update();}void PaintArea::doClear(){image.fill(backColor); //用现在的画布背景色进行填充update();}void PaintArea::setPenStyle(Qt::PenStyle style){penStyle = style;}void PaintArea::setPenWidth(int width){penWidth = width;}void PaintArea::setPenColor(QColor color){penColor = color;}void PaintArea::setBrushColor(QColor color){brushColor = color;}void PaintArea::setShape(ShapeType shape){curShape = shape;}五、实验步骤第一部分:设计界面一.设计菜单1.在QtCreator中新建Qt4 Gui Application工程,我这里使用的工程名为paint,使用默认的QMainWindow作为主窗口。
拼图游戏计算机毕业设计论文[管理资料]
嵌入式拼图游戏摘要拼图游戏是一种可变性很高且耐玩的游戏,在平时空闲的时候可以自己制定图片然后享受智力拼图,空闲之余不妨放松一下。
拼图是一种大人与小孩都能玩的游戏,它可以开发智力且帮助大家提高动脑解决问题的能力。
玩拼图还有助于手眼协调,玩家能训练和了解“部分”与“全部”的关系,可以知道许多的“部分”能拼凑出一个“全部”,以及一个“全部”是由许多“部分”所组成的。
本课题主要是在Linux环境下用嵌入式C语言及QT对一小型游戏进行开发。
选择一个游戏的拼图图片,单击方框可使图片移动,从而能够拼出一幅完整的图片,这类游戏主要考察玩家的反应能力,在游戏之余提高观察和应变能力。
本游戏中通过分析C游戏的开发流程,对功能进行设计。
该游戏主要实现了开始游戏,更改图片,游戏难度选择(9宫初级,16宫中级和25宫高级),战况成绩统计,成绩排名,背景音乐等功能。
游戏界面美观,操作简单,功能齐全,是广大游戏爱好者都喜欢的一款游戏,具有一定的复杂性和可玩性。
关键词:拼图游戏;嵌入式;Linux;QTEmbedded puzzle gameAbstractPuzzle game is a kind of high variability and playable game, in the usual idle time can develop their own pictures and enjoy intellectual puzzles, more than the idle wish to relax. Jigsaw is an adults and children can play the game, it can develop intelligence and ability to help people improve their brains to solve problems. Puzzles also help hand-eye coordination, players can train and learn "some" relationship with the "All", you can know that many "parts" can piece together an "All", as well as an "All" is composed of many "partial" composed.The main subject is embedded in the Linux environment using C language and QT for a small game development. Select a picture puzzle game, click the box to make the picture move, which can spell a complete picture, mainly on the type of game the players ability to respond to observe and improve the resilience of the remaining games.By analyzing this game C game development process, functional design. The main achievement of the game to start the game, change the image, select game difficulty (9 Palace beginner, 16 intermediate and 25 Palace Palace senior), fighting performance statistics, standings, background music and other functions. Game beautiful interface, easy operation, complete functions, is the majority of gamers like a game, with a certain complexity and playability.Key words: puzzle game;Embedded ; Linux;QT目录摘要 (i)Abstract ................................................................................................................................................ i i 1 前言 (1) (1) (1) (2)2 项目开发语言及开发环境 (3)C语言 (4) (4) (4) (4) (5) (5) (5) (5)QT Creator (6)嵌入式开发 (6)3 可行性分析 (7) (7) (8) (8)4 总体设计 (9) (9) (10) (10) (12)5 详细设计 (14) (15) (16) (21) (22) (23)QSS文件 (26)用户界面快照设计概述 (26)6 软件测试 (28) (28) (29) (31) (31) (32) (32) (33)结论 (34)参考文献 (36)致谢 (37)外文原文 (38)中文原文 (49)1 前言现代科学技术的发展,改变了人类的生活,作为新世纪的大学生,应该站在时代发展的前沿,掌握最先进的现代科学技术知识,以适应社会的发展,应能够独立地完成各种应要面临的任务,成为一名有创新意识的新型人才。
拼图游戏设计报告.doc
1.设计题目:拼图游戏2.设计思路:(1)划分功能模块:运行程序后,点击进入游戏,加载游戏界面,点击开始图片随机分布(2)可以通过选择游戏的级别,选择四图、九图还是十六图的游戏3.过程和函数的调用关系:源程序:Private Sub C1_Click()’点击进入游戏,默认进入级别为一般的九图的游戏界面Load Form1Form1.ShowUnload Form2End SubPrivate Sub C2_Click()’点击退出游戏,退出游戏界面运行EndEnd SubPrivate Sub exit_Click()’点击左上角游戏下拉菜单中的退出,退出游戏EndEnd SubPrivate Sub help_Click()’点击帮助菜单,提示关于拼图的信息MsgBox "拼图是一种老少皆宜、容易上手的益智类小游戏。
指定一幅完整的图片,将其分割成小的图块,并且打乱顺序后重新排列,其中有一块没有任何东西的空档,使用鼠标单击与空档相邻的图块,使该图块与空档位置互换,利用空档位置移动各图块,最终恢复图片原样,完成拼图。
移动的步数越少则表明游戏者的水平越高。
游戏过程中用参考图来获得帮助查找每图块的相对正确的位置.", , "帮助"End SubPrivate Sub jiandan_Click()’选择简单级别,打开四图游戏Load Form4Form4.ShowUnload Form2End SubPrivate Sub kunnan_Click()’选择困难级别,打开十六图游戏Load Form6Form6.ShowUnload Form2End SubPrivate Sub newgame_Click()’单击新游戏,打开新游戏Load Form1Form1.ShowUnload Form2End SubPrivate Sub yiban_Click()’选择一般级别,打开九图游戏Load Form1Form1.ShowUnload Form2End SubOption Explicit’一系列变量的定义Dim shunxu(8) As Integer '记录图片排列顺序的数组Dim Position As Integer '被点击的图片位置Dim kongtuposition As Integer '空图片的位置Dim MoveTimes As Integer '记录移动次数Dim newposition As Integer '用于计算位置,即新位置Dim Started As Boolean '逻辑型Dim Win As BooleanDim Pic(8) As PictureDim i As IntegerPrivate Sub Command2_Click()’返回主界面Load Form2Form2.ShowUnload Form8End SubPrivate Sub Command3_Click()’显示原图Load Form9Form9.ShowEnd SubPrivate Sub jiandan_Click()’单击简单,打开四图游戏界面Load Form4Form4.ShowUnload Form8End SubPrivate Sub kunnan_Click()’单击困难,打开十六图游戏界面Load Form6Form6.ShowUnload Form8End SubPrivate Sub newgame_Click()’单击新游戏,与点击开始的效果一样,小图块重新分布Dim Temp(8) As IntegerDim ChosenNumber As IntegerFor i = 0 To 8Temp(i) = iNextRandomize (Timer)For i = 8 To 0 Step -1ChosenNumber = Int(i * Rnd) '开始图片随机分布shunxu(8 - i) = Temp(ChosenNumber)Temp(ChosenNumber) = Temp(i)NextFor i = 0 To 8Picture1(i).Picture = Pic(shunxu(i))If shunxu(i) = 8 Then kongtuposition = iNextStarted = TrueMoveTimes = 0End SubPrivate Sub Picture1_Click(Index As Integer)’主要是确定空图的位置,然后根据空图位置确定所点击的图片往哪个方向移动Position = Index '所点图片位置If Started = False Then Exit SubIf ((Position <> 0) And (Position <> 3) And (Position <> 6)) Thennewposition = Position - 1’向左移If (newposition = kongtuposition) Then continueEnd IfIf ((Position <> 2) And (Position <> 5) And (Position <> 8)) Thennewposition = Position + 1’向右移If (newposition = kongtuposition) Then continueEnd IfIf (Position >= 3) Thennewposition = Position – 3’向上移If (newposition = kongtuposition) Then continueEnd IfIf (Position <= 5) Thennewposition = Position + 3’向下移If (newposition = kongtuposition) Then continueWin = TrueFor i = 0 To 7If (shunxu(i) <> i) Then Win = False’判断拼图是否拼对If Win = False Then Exit ForNextIf (Win = True) ThenMsgBox "恭喜恭喜!你很聪明。
QT拼图实验报告
拼图游戏1. 文档介绍本文档主要介绍了一个简单的拼图游戏的开发过程2. 系统概述就是一个简单的拼图游戏,将一幅图片随机打散,然后拼出原图,很简单,也没有加入时间限制,只是一个拼图游戏的核心。
3. 设计约束本软件是用Qt开发出来的,Qt一个c++的gui类库,可以跨多种操作系统平台。
除了Qt库,还用到的就是标准的c程序库,各个系统中的开发环境也都有。
基于这两点,所以我开发出来的拼图游戏可以跨平台移植而不用修改代码,直接在目标平台上再重新编译一下就行了。
另外,我开发的只是一个拼图游戏的核心。
有很强的可扩展性,可以根据不同的需要而加入代码进行定制。
拼图中用到的图像分割和随机打散算法都是比较高效的。
鼠标点击图像块进行图像的交换,非常易用,对用户来说,非常清晰。
4. 开发与运行环境●操作系统:Windows7 32位旗舰版Service Pack 1●处理器:Pentium(R)*************************.8GHz●安装内存(RAM): 2.00GB●编译器:minGW移植到windows下的gcc编译器●调试器:minGW移植到windows下的gdb调试器●Make:minGW中的mingw32-make●Qt C++ GUI库●软件开发成功后拿到windowx xp和其他windows 7下运行毫无问题。
5. 软件的总体结构图图1 程序总流程图5.1 随机打散图片图2 随机打散图片5.2 拼图流程图3 拼图流程6. 功能模块设计对于一个拼图游戏的核心来说,主要的模块就是图片的随机打散模块和拼图模块。
我将屏幕窗口分成9块,如下图所示:图4 屏幕窗口6.1 图像随机分割我们将图像也分成和屏幕窗口一样的9块,如下图所示:图5 图像分割在Qt中,视口是物理坐标系下指定的任意矩形,窗口指的是同一矩形,只不过是逻辑坐标系下的。
我们先将视口设置成屏幕上的一块,然后窗口设置成一块大小和一块图像的大小一样的矩形,我们将一块图像绘制到窗口中,经过窗口-视口变换后就绘制到了视口所对应的屏幕上。
拼图游戏需求规格说明书
拼图游戏需求规格说明书摘要: 记录拼图游戏的开发需求,包括功能需求、性能需求、用户界面接口、数据需求、条件和约束等关键字: 拼图游戏QT 需求规格拼图游戏项目组版本历史文档批准1.概述 (1)目标 (1)范围 (1)简写 (1)词汇 (1)2.外部接口需求 (1)3.架构和功能 (2)平台架构 (2)技术架构 (3)功能列表 (5)内部接口需求 (6)4.详细需求 (6)角色 (6)顶层用例图 (7)登录注销 (8)用例图 (8)SRS-1用户登录 (8)SRS-2用户注销 (9)SRS-3超时重新登录 (10)游戏操作....................................................................................... 错误!未定义书签。
用例图............................................................................................................... 错误!未定义书签。
SRS-4开始游戏 ...................................................................................... 错误!未定义书签。
SRS-5暂停游戏 ...................................................................................... 错误!未定义书签。
SRS-6停止游戏 ...................................................................................... 错误!未定义书签。
SRS-7恢复游戏 ...................................................................................... 错误!未定义书签。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
拼图游戏1. 文档介绍本文档主要介绍了一个简单的拼图游戏的开发过程2. 系统概述就是一个简单的拼图游戏,将一幅图片随机打散,然后拼出原图,很简单,也没有加入时间限制,只是一个拼图游戏的核心。
3. 设计约束本软件是用Qt开发出来的,Qt一个c++的gui类库,可以跨多种操作系统平台。
除了Qt库,还用到的就是标准的c程序库,各个系统中的开发环境也都有。
基于这两点,所以我开发出来的拼图游戏可以跨平台移植而不用修改代码,直接在目标平台上再重新编译一下就行了。
另外,我开发的只是一个拼图游戏的核心。
有很强的可扩展性,可以根据不同的需要而加入代码进行定制。
拼图中用到的图像分割和随机打散算法都是比较高效的。
鼠标点击图像块进行图像的交换,非常易用,对用户来说,非常清晰。
4. 开发与运行环境●操作系统:Windows7 32位旗舰版Service Pack 1●处理器:Pentium(R)*************************.8GHz●安装内存(RAM): 2.00GB●编译器:minGW移植到windows下的gcc编译器●调试器:minGW移植到windows下的gdb调试器●Make:minGW中的mingw32-make●Qt C++ GUI库●软件开发成功后拿到windowx xp和其他windows 7下运行毫无问题。
5. 软件的总体结构图图1 程序总流程图5.1 随机打散图片图2 随机打散图片5.2 拼图流程图3 拼图流程6. 功能模块设计对于一个拼图游戏的核心来说,主要的模块就是图片的随机打散模块和拼图模块。
我将屏幕窗口分成9块,如下图所示:图4 屏幕窗口6.1 图像随机分割我们将图像也分成和屏幕窗口一样的9块,如下图所示:图5 图像分割在Qt中,视口是物理坐标系下指定的任意矩形,窗口指的是同一矩形,只不过是逻辑坐标系下的。
我们先将视口设置成屏幕上的一块,然后窗口设置成一块大小和一块图像的大小一样的矩形,我们将一块图像绘制到窗口中,经过窗口-视口变换后就绘制到了视口所对应的屏幕上。
为了实现图像的随机打散,使用一个全局的映射数组map[3][3],map数组中存放的数字只能是0~8之间的数(包括0和8)。
map[0][0]对应屏幕的0块,map[0][1]对应屏幕的1块,依次类推,map[3][3]对应屏幕的8块。
如果map[0][0]里面存放的数是8,那么我们就将图像的第8块绘制到屏幕的第0块。
如果map数组中的数字是随机打乱的,那么我们通过这个映射数组将图像绘制到屏幕上后,屏幕上将会是打乱的图像。
为了方便代码的重用,我们将map数组的随机打乱编写到一个函数random()中,这样游戏再玩一次的时候就可以直接再调用一次这个函数重新打散一次映射数组就可以了。
map数组在初始化的时候,我们给map[0][0]~map[3][3]依次放进去0~8,然后再调用一次random()函数后将图像绘制到屏幕上去生成最初的打乱的图像。
random()函数的算法是这样的,首先产生两个随机数,然后再将这两个随机数对9求余的到两个9以内(即0~8且包括0和8)的随机数randData1和randData2,然后对map[randData1/3][randData1%3]和map[randData2/3][randData2%3]进行交换。
通过循环将这样的交换多进行几轮,然后就得到了一个随机打算的映射数组map。
代码:6.2 拼图我这个拼图游戏主要是用鼠标单击横纵相邻的两个块实现交换最后使打散的图像还原来完成拼图。
首先获得鼠标点击的位置,判断鼠标点击的位置是否在拼图区,如果不在拼图区,将描述选中块的一个数据结构selected置成没有选中任何块,然后刷新就完了;如果在拼图区,那么接下来就进行下面的程序。
计算鼠标选中那一块,通过selected数据结构判断之前是否已经有选中块了,如果之前没有选中块,那么置selected数据结构中选中块为现在选中的块,然后刷新;如果之前有选中的块,那么就判断之前选中的块和现在选中的块是否是横纵相邻的,如果不是横纵相邻的,那么就重置selected数据结构中选中块为现在选中的块,然后刷新;如果之前选中的块和现在选中的块是横纵相邻的,那么就交换两个选中的块,然后刷新。
我将判断游戏是否成功也放在了这个函数中,但是在模块的划分中,这是单独的一块,只是实现时为了实现方便将两个模块结合到了单独的一个函数中。
6.3 模块命名规则整个游戏我用一个类PintuWindow进行描述。
这个类继承自QMainWindow,其头文件为pintuwindow.h,实现文件为pintuwindow.cpp。
在PintuWindow类中,自定义了一个信号void success(),然后两个私有槽void random()和void succeed()。
在Pintu类的构造函数中,我将success()信号连接到槽succeed()以便在发射success()信号的时候可以自动执行secceed()槽。
那么在每次两个图块交换后我就判断游戏是否成功,如果成功,就会发射success()信号。
random()实现图块的随机打算,secceed()实现游戏成功的处理。
重新实现了两个虚函数void paintEvent(QPaintEvent *event)和void mousePressEvent(QMouseEvent *event)以实现绘图和鼠标操作。
然后是一个描述映射的数组int map[3][3],一个描述选中的情况的结构体struct pair selected和一个指向成功时弹出的那个对话框的指针SuccessDialog *successDialog等私有成员。
SuccessDialog类是在游戏成功时显示的一个对话框,继承自QDialog,其头文件是sucessdialog.h,实现文件时successdialog.cpp。
在这个类中自定义了两个信号void replay()和void exit()。
重新实现了void paintEvent(QPaintEvent *event)用以在对话框中插入一张图片。
然后就是一个QLabel *succ指向显示祝贺语的QLable,一个指向QPushButton重玩按钮的QPushButton *buttonReplay和一个指向QPushButton推出按钮的QPushButton *buttonExit。
当用户单击重玩按钮时就会先发射replay()信号,然后执行关闭这个对话框的槽。
Replay 信号在void PintuWindow::succeed()函数中是连接到了类PintuWindow的random()槽。
所以当我们单击rePlay按钮的时候会关闭对话框,重新随机打散图像,重新进行拼图游戏。
当用户单击exit按钮时就是发射exit信号,然后执行关闭这个对话框的槽。
exit()信号在void PintuWindow::succeed()函数中是连接到了类PintuWindow的close()槽,类PintuWindow的close()槽会关闭整个拼图游戏程序的窗口,然后结束拼图游戏。
7. 用户界面设计概述界面非常简单,一个窗口分成了两个区域,一个拼图区,一个原图区。
原图区显示原图,用以作拼图时的参照,拼图区实现拼图。
界面快照如下:图6 界面快照拼图成功时,会弹出一个对话框提示,成功时界面快照如下:图7 成功界面快照8. 综合考虑8.1 稳定性现在做出来的只是一个拼图游戏的核心部分,这些代码经过许多测试和修改稳定性也比较强了。
开始时鼠标单击会选中拼图区之外的图块,经过修改后鼠标不会选中拼图区之外的任何部分,map映射数组和selected结构在使用前都需要经过测试保证其正确,然后才使用的。
保证map数组不会出现越界错误,map数组和selected结构不会存入不正确的数据。
这些都是经过测试通过了的。
鼠标单击图块边缘时选中的图块也是经过精确的计算的到,不会出现单击图块边缘时明明是单击的这个图块,却由于计算偏差选中了另一个图块。
这些精确的计算也都是通过了软件的精确性测试通过了的。
8.2 可扩展性这个软件相当于一个拼图游戏的内核,可以围绕着这个内核进行许多的扩展,做成符合不同要求的拼图游戏。
例如,在这个游戏中加进一个定时器,将拼图的时间设置为一个与重玩次数相关的算法生成的时间或者设置成有用户自定义的形式。
当定时器的时间用完的时候如果用户还没有完成拼图,那么就游戏失败。
这个扩展时很容易实现的,而且游戏的图片随机打散算法和拼图算法以及拼图区和原图区的绘图等核心部分也不会改变。
还例如,还可以扩展成让用户自己选择一副自己喜欢的图片进行拼图。
那么这个时候需要一个动态加载用户图片的模块。
另外,就是需要将QImage对象(QImage对象是表示拼图游戏使用的图片的一个类)从paintEvent(QPaintEvent *event)函数的局部数据区移动到PintuWindow的全局数据区成为类PintuWindow的一个私有成员。
这个动态加载图片的模块就用以更新QImage对象中使用的图片。
这种情况下,游戏的图片随机打散算法和拼图算法都不会改变。
由于用户选择的图片的像素不同,拼图区和原图区的绘图只需要稍稍修改一个计算就可以了。
8.3 复用和移植本游戏使用了Qt这个C++的gui类库,Qt这个类库是一个跨多种操作系统平台的类库,所以基于Qt的应用程序有很好的平台可移植性。
另外就是使用了标准C函数库,除此之外,再没有用到别的库了,所以我的这个拼图游戏可以完全在Qt所支持的操作系统平台之间进行移植而不用修改源代码。
只需要拿到Qt所支持的平台上重新编译一次就可以了。
我的这个拼图游戏的图片随机打散算法和拼图算法的代码都是可以在别的拼图游戏中重用的。
界面的设计完全和功能代码的设计分开,界面的设计完全放倒了paintEvent(QPaintEvent *evnet)函数中,这样整个程序就比较清晰明了。
9 其他此程序的源代码见此文档父目录下的pintu目录。
参考文献:Qt官方文档《C++ GUI Qt4编程》(第2版)[加拿大]Jasmin Blanchette [英]Mark Summerfield。