资源简介
利用Qt实现了简单的拼图游戏。
打开图片后,程序将其缩放到 512*512。
代码片段和文件信息
#include “imglbl.h“
#include “qdebug.h“
ImgLbl::ImgLbl(QWidget *parent) :
QLabel(parent)
{
setFixedSize(513 513);
setAlignment(Qt::AlignTop | Qt::AlignLeft);
setMouseTracking(true);
fstX = -1;
fstY = -1;
sndX = -1;
sndY = -1;
Isfst = false;
}
void ImgLbl::changeSLT()
{
for(int i = 0; i < RN * 3 / 4; i++)
{
int x = rand() % RN y = rand() % RN;
int lt = TmpSLT[x];
TmpSLT[x] = TmpSLT[y];
TmpSLT[y] = lt;
}
}
bool ImgLbl::checkSLT()
{
bool isSLT = true;
for(int i = 0; i < RN; i++)
{
if(TmpSLT[i] != i)
isSLT = false;
}
return isSLT; //按顺序排列,返回true
}
void ImgLbl::init_data()
{
TmpSLT.clear();
RawRect.clear();
fstX = -1;
fstY = -1;
sndX = -1;
sndY = -1;
Isfst = false;
}
void ImgLbl::GetPixmap(QPixmap _pix)
{
RawPix = _pix.scaled(512 512 Qt::IgnoreAspectRatio Qt::SmoothTransformation);
TmpPix = RawPix;
setPixmap(TmpPix);
}
void ImgLbl::GetLevel(int i)
{
init_data();
lv = i;
int dn = i; //分割次数
DN = dn;
int rn = dn * dn; //子图像数
RN = rn;
int d_pix = 512 / dn; //间隔像素
DPix = d_pix;
RawRect.resize(rn);
TmpSLT.resize(rn);
for(int i = 0; i < rn ; i++)
{
TmpSLT[i] = i;
int y = i / dn x = i - (y * dn); //行列
y = y * d_pix; x = x * d_pix;
QPixmap pix;
pix = RawPix.copy( x y d_pix d_pix );
RawRect[i] = pix;
}
while(checkSLT())
changeSLT();
TmpPix.fill(Qt::black);
QPainter paint(&TmpPix);
for(int i = 0; i < rn; i++)
{
int y = i / dn x = i - (y * dn); //行列
y = y * d_pix; x = x * d_pix;
paint.drawPixmap(x y d_pix d_pix RawRect[TmpSLT[i]]);
}
paint.end();
setPixmap(TmpPix);
}
void ImgLbl::mousePressEvent(QMouseEvent *e)
{
if(!Isfst)
{
//第一点赋值
int x = e->pos().x() / DPix y = e->pos().y() / DPix;
fstX = x; fstY = y;
QPixmap pix = TmpPix;
QPainter paint(&pix);
paint.setPen(QPen(Qt::yellow 2));
paint.drawRect( x * DPix - 2 y * DPix - 2 DPix + 4 DPix + 4 );
paint.end();
setPixmap(pix);
Isfst = true;
}
else
{
int x = e->pos().x() / DPix y = e->pos().y() / DPix;
sndX = x; sndY = y;
int dst = abs(fstX - sndX) + abs(fstY - sndY); //距离
if(dst == 1) //行相邻或列相邻
{
int lt1 = fstY * DN + fstX lt2 = sndY * DN + sndX;
int lt = TmpSLT[lt1];
TmpSLT[lt1] = TmpSLT[lt2];
TmpSLT[lt2] = lt;
QPainter paint(&TmpPix);
paint.drawPixmap(fstX * DPix fstY * DPix DPix DPix RawRect[TmpSLT[lt1]]);
paint.drawPixmap(sndX * DPix sndY * DPix DPix DPix RawRect[TmpSLT[lt2]]);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3470 2016-12-23 11:25 JigSawPuzzle0\imglbl.cpp
文件 923 2016-12-23 11:12 JigSawPuzzle0\imglbl.h
文件 420 2016-12-22 21:54 JigSawPuzzle0\JigSawPuzzle0.pro
文件 18242 2016-12-23 11:29 JigSawPuzzle0\JigSawPuzzle0.pro.user
文件 183 2016-12-22 21:52 JigSawPuzzle0\main.cpp
文件 528 2016-12-23 11:16 JigSawPuzzle0\mainwindow.cpp
文件 436 2016-12-23 11:17 JigSawPuzzle0\mainwindow.h
文件 1306 2016-12-23 11:18 JigSawPuzzle0\mainwindow.ui
目录 0 2016-12-23 11:29 JigSawPuzzle0
----------- --------- ---------- ----- ----
25508 9
- 上一篇:mybatis关联查询问题(一对多、多对一)
- 下一篇:区间预测控制
相关资源
-
Qt st
yle Sheets Examples - 提供Qt中快速多次发射信号与耗时槽函
- 基于Qt的坦克大战游戏源码
- Qt5.5 代码实现记事本程序 MiniText
- Qt4第三方库qextserialport
- 多界面跳转切换
- Qt VideoCapture图像采集
- Qt Designer汉化包亲测可用内附说明.z
- Qt 自定义导航栏
- qt黑白棋源码简单
- Qt4.8.4和creator和mingw安装配置说明总结
- 在ARM9和ARMLinux下利用QT编写的实时数据
- 华清远见智能家居项目
- QT实现计算器包含科学计算与进制转换
- qt简易黑白棋代码,不带可执行程序,
- QT text预加载方式显示大文件文本.zi
- 基于linux Qt的仿QQ聊天简单对话框
- QthreadPools.rar
- ESP8266和MQTT协议接收平台下发命令版
- QT编写程序,实现一个坐标轴功能
- QT+opencv图像几何变换,包括图像平移
- Qt鼠标拖动绘制基本几何图形(直线、
- 基于QT和OpenCV的五子棋实现源码
-
linux下基于mpla
yer的多媒体播放器 - [Qt]Qt Creator汉化方法 qt汉化包
- qt实现音频采集
- 局域网聊天
- Qt自适应行高表头重载
- TimeDynamicListDemo.rar
- Qt实现游戏FlappyBird
评论
共有 条评论