0
点赞
收藏
分享

微信扫一扫

Qt系统机制

boom莎卡拉卡 2024-07-30 阅读 13

Qt系统

Qt文件概述

输入输出设备类

QFile

QFileInfo

常用方法:

常用方法说明
isDir()检查该⽂件是否是⽬录
isExecutable()检查该⽂件是否是可执⾏⽂件;
fileName()获得⽂件名
completeBaseName()获取完整的⽂件名
suffix()获取⽂件后缀名
completeSuffix()获取完整的⽂件后缀
size()获取⽂件⼤⼩
isFile()判断是否为⽂件
fileTime()获取⽂件创建时间、修改时间、最近访问时间等

Qt多线程

Qt多线程常用API

API说明
run()线程的⼊⼝函数…
start()通过调⽤ run() 开始执⾏线程。操作系统将根据优先级参数调度线程。如果线程已经在运⾏,这个函数什么也不做。
currentThread()返回⼀个指向管理当前执⾏线程的 QThread的指针。
isRunning()如果线程正在运⾏则返回true;否则返回false。
sleep() / msleep() /usleep()使线程休眠,单位为秒 / 毫秒 / 微秒
wait()阻塞线程,直到满⾜以下任何⼀个条件:与此 QThread 对象关联的线程已经完成执⾏(即当它从run()返回时)。如果线程已经完成,这个函数将返回 true。如果线程尚未启动,它也返回 true。已经过了⼏毫秒。如果时间是 ULONG_MAX(默认值),那么等待永远不会超时(线程必须从run()返回)。如果等待超时,此函数将返回 false。这提供了与 POSIX pthread_join() 函数类似的功能。
terminate()终⽌线程的执⾏。线程可以⽴即终⽌,也可以不⽴即终⽌,这取决于操作系统的调度策略。在terminate() 之后使⽤ QThread::wait() 来确保。

常用信号:

信号说明
finished()当线程结束时会发出该信号,可以通过该信号来实现线程的清理⼯作。

使用Qt多线程

eg:通过线程来实现定时器

  1. 通过Qt Design设计基础界面
    s
  2. 设计MyThread线程
    在这里插入图片描述
  3. 给MyThread定制一个信号,名字教timeout吧:
    在这里插入图片描述
  4. 重写run函数
    在这里插入图片描述
  5. 给MyThread类的timeout绑定对应的槽函数:
    在这里插入图片描述
  6. 为当前线程设置回收工作

在这里插入图片描述

  1. 启动线程

在这里插入图片描述
8. 运行结果
在这里插入图片描述

线程安全

互斥锁

eg:
两个线程对g_val同时自加1000次
在这里插入图片描述
运行结果:
在这里插入图片描述

读写锁

条件变量

信号量

QSemaphore semaphore(2); //同时允许两个线程访问共享资源
//在需要访问共享资源的线程中
semaphore.acquire(); //尝试获取信号量,若已满则阻塞
//访问共享资源
//...
semaphore.release(); //释放信号量
//在另⼀个线程中进⾏类似操作

Qt网络

QUdpSocket

常用方法如下:

常用方法说明
bind(const QHostAddress&,quint16)绑定指定的端⼝号.
receiveDatagram()返回 QNetworkDatagram . 读取⼀个 UDP 数据报.
writeDatagram(const QNetworkDatagram&)发送⼀个 UDP 数据报.

信号

信号说明
readyRead在收到数据并准备就绪后触发.

QNetworkDatagram

常用方法如下:

常用方法说明
QNetworkDatagram(const QByteArray&, const QHostAddress& , quint16 )通过 QByteArray , ⽬标 IP 地址,⽬标端⼝号 构造⼀个 UDP 数据报.通常⽤于发送数据时.
data()获取数据报内部持有的数据. 返回QByteArray
senderAddress()获取数据报中包含的对端的 IP 地址.
senderPort()获取数据报中包含的对端的端⼝号.

设计一个UDP回显服务器

QTcpServer

常用方法:

API说明
listen(const QHostAddress&,quint16 port)绑定指定的地址和端⼝号, 并开始监听.
nextPendingConnection()从系统中获取到⼀个已经建⽴好的tcp 连接.返回⼀个 QTcpSocket , 表⽰这个客⼾端的连接. 通过这个 socket 对象完成和客⼾端之间的通信.

信号

信号说明
newConnection有新的客⼾端建⽴连接好之后触发.

QTcpSocket

常用方法:

API说明
readAll()读取当前接收缓冲区中的所有数据.返回 QByteArray 对象.
write(const QByteArray& )把数据写⼊ socket 中.
deleteLater暂时把 socket 对象标记为⽆效. Qt会在下个事件循环中析构释放该对象.

信号

信号说明
readyRead有数据到达并准备就绪时触发.
disconnected连接断开时触发.

Tcp版本的回显服务器

HttpClient

核心API

常用方法说明
get(const QNetworkRequest& )发起⼀个 HTTP GET 请求. 返回 QNetworkReply 对象
post(const QNetworkRequest& , const QByteArray& )发起⼀个 HTTP POST 请求. 返回 QNetworkReply 对象.
常用方法说明
QNetworkRequest(const QUrl& )通过 URL 构造⼀个 HTTP 请求.
setHeader(QNetworkRequest::KnownHeaders header,const QVariant &value)设置请求头.

其中的 QNetworkRequest::KnownHeaders 是⼀个枚举类型, 常⽤取值:

取值说明
ContentTypeHeader描述 body 的类型.
ContentLengthHeaderContentLengthHeader
ContentLengthHeader⽤于重定向报⽂中指定重定向地址. (响应中使⽤, 请求⽤不到)
CookieHeaderCookieHeader
UserAgentHeader设置 User-Agent
常用方法说明
error()获取出错状态.
errorString()获取出错原因的⽂本.
readAll()读取响应 body
header(QNetworkRequest::KnownHeaders header)读取响应指定 header 的值.

此外, QNetworkReply 还有⼀个重要的信号 finished 会在客⼾端收到完整的响应数据之后触
发.

Qt 音频

常用方法说明
play()开始或继续播放当前源。

eg:

在这里插入图片描述

Qt视频

API说明
setMedia()设置当前媒体源
setVideoOutput()将QVideoWidget视频输出附加到媒体播放器,如果媒体播放器已经附加了视频输出,将更换⼀个新的。
举报

相关推荐

0 条评论