拼图游戏二次开发心得
1. fopen函数遇上空文本
当fopen函数打开不存在的文件时,其打开模式只能为w","w+","wb","wb+"
这样子会创建一个新文件,而模式为“rb”等则会发生错误;
当用feof()函数判断是否达到文件尾时,只有文本文件可以用 EOF值(-1),二进制文本如果到达文本末尾则会返回0;
2. 文本文件的字符集编码问题
在将文件中的player的name写到Qtreewidget 中时,总是乱码,
最后发现自己讲qsting向 char * 转换时,发现了错误,更改代码,
memcpy(buff, m_player_name.toLocal8Bit().data(), 20);
上述代码将qstring转换成 本地utf_8编码。
更简单的方法,在头文件中加上
#pragma execution_character_set("utf-8")
可以解决qt中中文显示问题;
3. Qt5.8 中开始计时器代码示例
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), SLOT(displayTime()));//连接槽
timer->start(1000); //启动定时器
槽函数则为自己想要实现的功能。
4. 各种窗口,按钮之间传递signals。
特别强调,合理使用 子控件中parent->parent(),以此链接主窗口。
示例代码:
connect(parent->parent(), SIGNAL(sendGameTime(int)), this, SLOT(GetGameTime(int)));
5. 生成随机数
直接贴代码吧,自己研究了好一阵
class WxRand// 获取一个大小为size的动态随机不重复数组,并且最大数为size.
{
public:
static int * getRand(int size=1)
{
int *num=new int[size];
int i = 1;
srand(time(NULL));
num[0]= rand()%size;
int flag;
while (1)
{
num[i]= rand()%size;
int k = i;
flag = 0;
for (int j = 0; j<k; j++)
{
if (num[j]== num[i])
{
flag++;
}
}
if (flag == 0)
{
i++;
}
if (i==size)
{
break;
}
}
return num;
}
WxRand()
{
}
~WxRand(void)
{
}
};