自学之路day01---qt小项目

一、抽奖机
功能:对本机图片进行快速显示。
明确抽奖机界面需要哪些模块组成:

  1. 显示窗体(Dialog)
  2. 绘画窗体(frame):让图形显示在frame组件当中。
  3. 按钮(pushbutton):点击开始,显示图片内容。

原理:
点击开始按钮时,触发定时器,定时器事件完成对图片的绘制。
步骤:

  1. 建立工程项目 Ernie(注意:此项目要将shadow build 关闭)
  2. 利用qtcreator完成界面的绘制
  3. 编写代码
    逻辑顺序要明确:
    ①、添加相应的头文件
    ②、增加适当的成员变量,来表示各种需求(图片索引,定时器状态,开始状态标记等)
    ③、添加槽函数:
    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):用于遍历文件的内容,第一个变量应该是保存遍历到的内容,第二个则是遍历的类型选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值