一、抽奖机
功能:对本机图片进行快速显示。
明确抽奖机界面需要哪些模块组成:
- 显示窗体(Dialog)
- 绘画窗体(frame):让图形显示在frame组件当中。
- 按钮(pushbutton):点击开始,显示图片内容。
原理:
点击开始按钮时,触发定时器,定时器事件完成对图片的绘制。
步骤:
- 建立工程项目 Ernie(注意:此项目要将shadow build 关闭)
- 利用qtcreator完成界面的绘制
- 编写代码
逻辑顺序要明确:
①、添加相应的头文件
②、增加适当的成员变量,来表示各种需求(图片索引,定时器状态,开始状态标记等)
③、添加槽函数:
pushbutton按钮对应的槽函数。
④、声明多个私有函数:
加载图片到容器当中;
绘图函数,完成对图像的绘制;
定时器事件函数:调用绘图函数;
⑤、在源文件中对声明函数完成编写
加载图片到容器当中:
void ErnieDialog::loadPhotos(const QString& path)
{
QDir dir(path);
foreach (QString file, dir.entryList(QDir::Files)) {
//qDebug() << file;
QImage image(path+"/"+file);
m_vecPhotos << image;
}
foreach (QString subDir, dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot)) {
loadPhotos(path+"/"+subDir);
}
}
定时器处理事件:
void ErnieDialog::timerEvent(QTimerEvent *)
{
m_index = qrand() % m_vecPhotos.size();
update();
}
绘图事件:
void ErnieDialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QRect rePhoto = ui->frame->frameRect();
rePhoto.translate(ui->frame->pos());
painter.drawImage(rePhoto, m_vecPhotos[m_index]);
}
槽函数实现的功能:
void ErnieDialog::on_pushButton_clicked()
{
if(isStarted == false){
isStarted = true;
ui->pushButton->setText("stop");
m_idTimer = startTimer(50);
}
else{
isStarted = false;
ui->pushButton->setText("start");
killTimer(m_idTimer);
}
}
注意事项:
- 相关头文件如下:
#include :用来创建dir对象,能够进行相关文件的操作功能
#include :绘图事件
#include :获取随机数字
#include :容器类,我暂时还没学到 - 收获:
foreach(vriable,contianer):用于遍历文件的内容,第一个变量应该是保存遍历到的内容,第二个则是遍历的类型选择。