QT:目录和定时器
来源:互联网 发布:京麦工作台和淘宝助理 编辑:程序博客网 时间:2024/05/22 03:01
目录和定时器
QVector 线性表容器类
QVector<T>
QDir 遍历目录的方法类
QDir dir (path);
foreach QT中的for循环,关键字:
QLinkedList<QString> list;
...
QString str;
foreach (str, list) {
qDebug() << str;
}
定时器事件,由QObject提供;定时器信号,由QTimer 提供
通过定时器实现定时:
// 开启定时器
int QObject::startTimer (int interval);
参数:interval 毫秒,每隔interval触发一次定时器事件
返回值:成功返回定时器ID,失败返回0
// 定时器事件处理
void QObject::timerEvent (QTimerEvent* e) [virtual];
// 结束定时器
void QObject::killTimer (int id);
参数:id 是开启定时器返回值
《案例》摇奖机
1 )工程目录名 Ernie
2 )类名和文件名 ErnieDialog
3 )组件
m_labName
m_labClock
属性:
frameshape: panel
frameshadow: sunken
autofilebackground: √
palettr: 继承--调色板--双击--修改颜色
font: 设置字体
m_fmPhoto
属性:
frameshape: box
垂直策略:expanding
m_btnStart
属性:
font: 大小 16
文本: 开始
enable: 去掉√,禁用按钮
/** 代码演示 - 基于目录和定时器的摇奖机 **/
// .h 头文件 #ifndef ERNIEDIALOG_H#define ERNIEDIALOG_H#include <QDialog>#include <QVector> // 容器类#include <QPair> // 模板类(能够存储一对儿对象)#include <QDir> // 遍历目录类#include <QTime> // 时间类#include <QPainter> // 画家类namespace Ui {class ErnieDialog;}class ErnieDialog : public QDialog { Q_OBJECTpublic: explicit ErnieDialog(QWidget *parent = 0); ~ErnieDialog();private slots: void on_m_btnStart_clicked();private: // 绘制图片事件的虚函数 void paintEvent (QPaintEvent* ); // 定时器事件处理虚函数 void timerEvent (QTimerEvent* ); // 更新显示人名 void updateName (int idxPhoto); // 更新显示摇奖时间 void updateClock (int secClock); // 加载指定目录下的所有图片到容器中,参数:路径 void loadPhotos (const QString & path);private: // 保存所有图片的容器,每个元素都是QPair QVector< QPair<QString, QImage> > m_vecPhotos; // 图片索引 int m_idxPhoto; // 每次摇奖剩余的时间:秒 int m_secClock; // 换图片的定时器 int m_idtPhoto; // 更新显示时间的定时器 int m_idtClock; // 摇奖停止定时器 int m_idtStop;private: Ui::ErnieDialog *ui;};#endif // ERNIEDIALOG_H
// .cpp 源文件#include "ErnieDialog.h"#include "ui_ErnieDialog.h"ErnieDialog::ErnieDialog(QWidget *parent) : QDialog(parent), ui(new Ui::ErnieDialog) { ui->setupUi(this); // 加载指定目录下图片,注意路径 loadPhotos ("./images"); qDebug ("test"); // 调试输出 test if (! m_vecPhotos.empty ()) { // 设置随机种子,调用当前系统的毫秒做随机种子数字 qsrand (QTime::currentTime ().msec ()); // 从容器中随机取出一张初始图片 m_idxPhoto = qrand () % m_vecPhotos.size (); // size() 获取容器中元素个数 // 根据索引显示图片 updateName (m_idxPhoto); updateClock (m_secClock = 0); ui->m_btnStart->setEnabled (true); }}ErnieDialog::~ErnieDialog() { delete ui;}// 开始按钮槽函数void ErnieDialog::on_m_btnStart_clicked() { // 禁用开始按钮 ui->m_btnStart->setEnabled (false); // 设置摇奖时间 m_secClock = 5; // 每隔 5 秒摇出1个奖 // 更新显示时间 updateClock (m_secClock); // 开始切换图片:50ms m_idtPhoto = startTimer (20); // 每隔50毫秒换1张图片 m_idtClock = startTimer (1000); // 每隔1秒更新一次显示时间 // 5s 以后停止倒时 m_idtStop = startTimer (1000 * 5);}// 绘制图片事件的虚函数void ErnieDialog::paintEvent (QPaintEvent*) { qDebug ("%s", __func__); // 测试函数调用 // 如果容器中图片是否为空 if (! m_vecPhotos.empty ()) { QPainter painter (this); QRect rcPhoto = ui->m_fmPhoto->frameRect (); // 矩形框 rcPhoto.translate (ui->m_fmPhoto->pos ()); painter.drawImage (rcPhoto, m_vecPhotos[m_idxPhoto].second); }}// 定时器事件处理虚函数void ErnieDialog::timerEvent (QTimerEvent* event) { // event->timerId () :获取当前定时器ID // 换图片定时器倒时 if (event->timerId () == m_idtPhoto) { // 随机取出一张图片 m_idxPhoto = qrand () % m_vecPhotos.size (); // 更新显示图片 update (); // 更新显示人名 updateName (m_idxPhoto); } // 更新显示时间定时器倒时 else if (event->timerId () == m_idtClock) { updateClock (--m_secClock); } // 停止摇奖定时器倒时 else if (event->timerId () == m_idtStop) { // 关闭所有的定时器 killTimer (m_idtClock); killTimer (m_idtPhoto); killTimer (m_idtStop); // 使能开始按钮 ui->m_btnStart->setEnabled (true); }}// 更新显示人名void ErnieDialog::updateName (int idxPhoto) { ui->m_labName->setText (m_vecPhotos[idxPhoto].first);}// 更新显示摇奖时间void ErnieDialog::updateClock (int secClock) { QString str = QTime (0, 0, secClock).toString ("hh:mm:ss"); ui->m_labClock->setText (str);}// 加载指定目录下的所有图片到容器中,参数:路径void ErnieDialog::loadPhotos (const QString & path) { // 构建目录对象 QDir dir (path); // 遍历普通文件 foreach (QString file, dir.entryList (QDir::Files)) { QString name = file; // 去掉后缀,图片名.jpg ---> 图片名 // .的下标是几,就返回从左到右多少个字符 name.resize (name.lastIndexOf ('.')); // 构建图片对象 ./photo/xxx.jpg QImage image (path + '/' + file); // 构建QPair对象存到容器中 m_vecPhotos << qMakePair (name, image); } // 递归遍历子目录,不包括".",".." foreach (QString subDir, dir.entryList (QDir::Dirs | QDir::NoDotAndDotDot)) { loadPhotos (path + '/' + subDir); }}
《案例》摇奖机 - 【总结】
QPaintEvent 绘制事件类 - 画图形的事件
// 绘制图片事件的虚函数
void QWidget::paintEvent(QPaintEvent * event) [virtual];
QVector 容器类 // 同C++容器类一样用,动态数组类
QPair 模板类 // 能够存储一对儿对象
// 构建QPair对象
QPair<T1, T2> qMakePair(const T1 & value1, const T2 & value2);
eg:// m_vecPhotos 为容器对象,把name和image构建放到容器中
QVector<QPair<QString, QImage> > m_vecPhotos;
m_vecPhotos << qMakePair (name, image);
QDir 遍历目录类
// 使用path路径构建一个目录对象
QDir::QDir(const QString & path = QString());
// QDir类里的成员函数,返回文件列表中所有文件/目录名称字符串
QStringList entryList(const QStringList & nameFilters) const;
eg:// 文件夹中文件的遍历
QDir dir (path);
foreach (QString file, dir.entryList (QDir::Files)) { ... }
QTime 时间类
// 定时器事件处理的虚函数
void QTimer::timerEvent(QTimerEvent * e) [virtual];
QTime QTime::currentTime() [static]; // 返回系统当前时间
eg: // 以毫秒为单位设置随机数种子
qsrand (QTime::currentTime ().msec () );
// 获取当前定时器ID
int QTimerEvent::timerId() const;
// 杀死定时器标示符ID,定时器标示符返回开始时间,启动1个定时事件
void QObject::killTimer(int id); // ---> startTimer()
setEnabled ( bool )
// 设置按钮的禁用与使能能点击
ui->m_btnStart->setEnabled (true);
ui->m_btnStart->setEnabled (false);
// 设置50毫秒的时间,属于QObject
startTimer(50); // 50-millisecond timer
lastIndexOf ( const QString & )
// 返回索引一个字符串中末次出现位置,搜索从最后向索引位置。
int QString::lastIndexOf(const QString & str) const;
eg:// 去掉后缀,图片名.jpg ---> 图片名 // .的下标是几,就返回从左到右多少个字符
name.resize (name.lastIndexOf ('.'));
- QT:目录和定时器
- Qt线程和定时器
- QT产生随机数和定时器
- QT产生随机数和定时器
- qt之定时器 和随机数
- Qt定时器:QObject类的定时器和定时器类QTimer
- Qt Creator定时器和随机产生数字
- Qt的事件处理和定时器解析
- Qt定时器
- Qt定时器
- QT 定时器
- Qt 定时器
- qt定时器
- QT定时器
- QT 定时器
- QT定时器
- QT 构建目录必须和源目录为同级目录
- day_04_资源和图像、目录和定时器、鼠标和键盘
- QT:Qt创造器的使用 creator
- QT:资源和图像
- 游戏状态
- LeetCode92. Reverse Linked List ii
- Mac下安装mysql5.7 完整步骤(图文详解)
- QT:目录和定时器
- Vim插件之YouCompleteMe
- The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class fi
- QT:鼠标事件
- MySql--函数
- 93. Restore IP Addresses
- DownloadManager
- QT:键盘事件
- ResourcesManager