Qt的非界面常用类
Qt中时间
```c
时间相关类:
QDate -------- 年月日
QTime -------- 时分秒
QDateTime ---- 年月日时分秒
```
获取系统时间
static QTime QTime::currentTime();
转换成字符串
成员函数:
QString QTime::toString(QString &format)const;
//format表示时间的格式
//10:56:30 format="hh:mm:ss"==>"10:56:30"
日期类的用法类似。
定时器
QObject类自带定时器
启动定时器
int QObject::startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer);
参数:
interval - 定时器定时时间,单位是毫秒
timerType - 计时精度,采用默认
返回值:
返回定时器的ID
关闭定时器
void QObject::killTimer(int id);
//传入要关闭的定时器ID
定时器超时处理函数
当定时器时间到,自动调用该函数
[virtual protected] void QObject::timerEvent(QTimerEvent *event);
//重写该函数 event->timerId() ----- 获取定时器ID
Qt中的定时器类 ---------- QTimer
构造QTimer对象
启动定时器
//成员函数
void start(int msec);//设置+启动
//msec:超时时间,单位是毫秒
暂停定时器
void stop();
超时信号
signals:
void timeout();
//定时器时间到自动触发该信号,自动调用其连接的槽函数
练习:
使用定时器实现一个秒表,秒表10ms刷新一次时间,显示时分秒,秒保留3位小数
Qt中的多任务
Qt中的进程 ---------- QProcess(进程相对独立的进程)
QProcess是一个进程类,QProcess启动进程的方式类似于Linux中的fork+exec
成员函数:
start(命令,参数); ------------ 启动进程执行可执行程序
kill(); ----------- 结束进程
state(); ---------- 获取进程状态
QProcess::Running ----- 正在运行
QProcess::NotRuning --- 未在运行
waitForFinished(); -------- 等待进程结束
Qt中的线程 --------- QThread
win中调用线程
Qt提供了支持线程的类QThread,也提供了许多类实现线程的互斥和同步:互斥锁(QMutex),读写锁(QReadWriteLock),信号量(QSemaphore),条件变量(QWaitCondition)。
线程的实现语法
class MyThread:public QThread{
O_OBJECT
//...
protected:
void run();//子类重写父类的线程函数
//...
};
void MyThread::run()
{
//线程需要完成的工作
}
线程控制相关的成员函数
1.启动线程
void start();
2.退出线程
void exit(ret=0);
3.终止线程
void terminate();
4.等待线程
void wait(time=xxx);
5.线程睡眠
void sleep(s);
void msleep(ms);
void usleep(us);
添加一个class文件,自己new的来重写
线程要去重写
会报错,要加上头文件,QTthread
使用线程模拟文件下载
何时使用线程
程序中有多个耗时的操作,通常是前台操作(界面操作)和后台操作都比较耗时,如果只有一个线程,导致界面响应变慢,此时可以使用多线程。
线程的互斥和同步
由于线程之间共享的数据较多,访问共享数据时使用互斥和同步机制加以保护
1)互斥锁 --------- QMutex
加锁:
void lock();
bool trylock();
解锁:
void unlock();
2)读写锁 --------- QReadWriteLock
加读锁(共享锁):
void lockForRead();
加写锁(互斥锁):
void lockForWrite();
解锁:
void unlock();
3)信号量 --------- QSemaphore
P操作(-1):
void acquire(int r=1);
V操作(+1):
void release(int n=1);
4)条件变量 ------ QWaitCondition
```c
等待:
bool wait(QMutex &);
唤醒:
void wakeOne();//唤醒一个
void wakeAll();//全部唤醒
```
Qt程序的移植
Qt是跨平台的,当Qt程序要运行在嵌入式Linux中,需要进行移植,Qt移植分为两个部分
1.Qt环境的移植(库)//需要动态库的支持
2.Qt程序的移植
Qt环境的移植
Qt是开源的,所以可以从官网下载Qt源代码,使用交叉编译工具编译成目标平台(arm-linux)的库文件,将编译生成的库文件拷贝到开发板,并设置环境变量即可。
移植Qt和移植其他的Linux工具的方法没有区别
GEC6818开发板的Qt环境移植已经完成,Qt相关的文件在/usr/local/Qt-Embedded-5.7.0
Qt程序的移植
这里老师讲的不好可,看我另一篇文章
作业:
1.将将文件下载模拟程序移植到开发板运行(界面大小不要超过开发板屏幕大小800 X 480)
交作业截图即可
关闭开发板默认加载的程序
vi /etc/profile 注释一下内容即可