Qt的常用类

news/2024/4/27 9:51:28/文章来源:https://blog.csdn.net/qq_33867131/article/details/130347936

文章目录

          • Qt的常用类
            • 1、QFile 是一个文件I/O类,用于读写文件;
            • 2、QPainter 是一个绘图类,用于绘制各种图形;
            • 3、QPropertyAnimation属性动画
            • 4、Q_PROPERTY属性系统
            • 5、QThread多线程
            • 6、QTcpServer
            • 7、QTcpSocket
            • 8、QHostAddress
            • 9、QUdpSocket

Qt的常用类
1、QFile 是一个文件I/O类,用于读写文件;
  • 包含属性:

    • fileName:文件名;
  • 包含方法:

    • open(QIODevice::OpenMode mode):打开文件以进行读取或写入;
    • close():关闭文件;
    • readAll():返回文件的所有数据;
    • write(const QByteArray &data):将数据写入文件;

实例化QFile并设置fileName属性,随后调用open()函数打开文件,并可以使用readAll()和write()函数进行读写操作:

#include <QFile>
#include <QDebug>int main(int argc, char *argv[])
{QApplication app(argc, argv);QFile file("data.txt");if (file.open(QIODevice::ReadOnly)) {qDebug() << "Contents: " << file.readAll();file.close();}return app.exec();
}
2、QPainter 是一个绘图类,用于绘制各种图形;
  • 包含方法:

    • begin(QPaintDevice* device):指定要在其上绘图的设备;
    • end():结束绘制;
    • drawText(int x, int y, const QString &text):在指定位置绘制文本;
    • drawLine(int x1, int y1, int x2, int y2):绘制一条直线;

实例化QPainter并使用begin()函数设置绘图设备。随后使用绘图函数进行绘制,并使用end()结束绘制:

#include <QPainter>
#include <QPixmap>int main(int argc, char *argv[])
{QApplication app(argc, argv);QPixmap pixmap(400, 400);QPainter painter(&pixmap);painter.drawText(180, 200, "Hello Qt!");painter.drawLine(0, 0, 400, 400);painter.drawLine(400, 0, 0, 400);painter.end();QLabel label;label.setPixmap(pixmap);label.show();return app.exec();
}
3、QPropertyAnimation属性动画

QPropertyAnimation是一个属性动画类,用于在时间内更改窗口小部件的属性值;

  • 包含属性:

    • targetObject:目标对象;
    • propertyName:目标属性名称;
  • 包含方法:

    • setDuration(int msecs):设置动画持续时间(毫秒);
    • setStartValue(const QVariant &value):设置动画开始值;
    • setEndValue(const QVariant &value):设置动画结束值;
    • start():启动动画;

实例化QPropertyAnimation并为其设置目标对象和属性名称。随后使用setStartValue()和setEndValue()设置开始值和结束值,并使用setDuration()设置动画持续时间(毫秒)。最后使用start()函数启动动画:

#include <QApplication>
#include <QLabel>
#include <QPropertyAnimation>int main(int argc, char *argv[])
{QApplication app(argc, argv);QWidget window;window.setWindowTitle("Property Animation Example");QLabel label("Animate me!", &window);label.move(50, 50);QPropertyAnimation animation(&label, "geometry");animation.setDuration(1000);animation.setStartValue(QRect(50, 50, 150, 60));animation.setEndValue(QRect(500, 300, 150, 60));animation.start();window.show();return app.exec();
}
4、Q_PROPERTY属性系统

Q_PROPERTY是一个宏,用于将C ++属性的getter和setter函数暴露给Qt元对象系统;

  • 包含方法:

    • Q_PROPERTY(type name MEMBER memberName):将类型为type、名称为name且成员变量名为memberName的属性添加到类中;

在C++类定义中使用Q_PROPERTY()宏:

#include <QObject>class MyClass: public QObject {Q_OBJECTQ_PROPERTY(int value MEMBER m_value)public:int m_value = 42;
};
5、QThread多线程

QThread是一个多线程类,用于在单独的线程中运行一个对象;

  • 包含方法:

    • run():启动线程;
    • sleep(unsigned long secs):使线程休眠指定的秒数;
    • terminate():终止线程的执行;

创建一个派生自QThread的新类,并重写run()函数实现需要在单独线程中运行的功能,随后创建该类的实例,并调用start()函数启动线程:

#include <QThread>
#include <QDebug>class MyThread : public QThread {
public:void run() override {for (int i = 0; i < 10; ++i) {qDebug() << "Thread running...";sleep(1);}}
};int main(int argc, char *argv[])
{QApplication app(argc, argv);MyThread thread;thread.start();return app.exec();
}
6、QTcpServer

QTcpServer类实现了一个TCP服务器,它可以监听任何到达指定端口的客户端连接,并创建一个QTcpSocket用于与客户端进行通信;

包含属性:

  • serverName:该服务器的名称;
  • maxPendingConnections:等待连接队列中允许的最大连接数;
  • serverAddress:服务器地址,可以设置为特定主机名或IP地址;
  • serverPort:服务器端口号。

包含方法:

  • listen函数:监听端口,等待客户端连接请求;
  • accept函数:接受来自客户端的连接请求;
  • hasPendingConnections函数:判断是否有待处理的客户端连接请求;
  • nextPendingConnection函数:返回下一个挂起的连接作为新的QTcpSocket对象;

创建一个服务器并开始监听客户端连接请求:

QTcpServer* server = new QTcpServer(this);if(!server->listen(QHostAddress::Any, 1234)) {qDebug() << "Failed to start server!";
}
else {qDebug() << "Server started!";
}connect(server, &QTcpServer::newConnection, [=](){QTcpSocket* socket = server->nextPendingConnection();qDebug() << "New client connected: " << socket->peerAddress().toString() << ":" << socket->peerPort();
});
7、QTcpSocket

QTcpSocket类实现了一个TCP套接字,它可以与远程主机建立TCP连接,并收发数据;

包含属性:

  • localAddress:本地地址;
  • localPort:本地端口号;
  • peerAddress:远程主机地址;
  • peerPort:远程主机端口号;

包含方法:

  • connectToHost函数:与指定的主机建立TCP连接;
  • disconnectFromHost函数:关闭连接;
  • write函数:发送数据到套接字;
  • readAll函数:从套接字读取所有可用数据并返回;
  • state函数:返回套接字的状态;

创建一个QTcpSocket对象并连接到远程服务器:

QTcpSocket* socket = new QTcpSocket(this);connect(socket, SIGNAL(readyRead()), this, SLOT(readData()));
connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(displayError(QAbstractSocket::SocketError)));socket->connectToHost("127.0.0.1", 1234);if(socket->waitForConnected()) {qDebug() << "Connected to server!";
}
else {qDebug() << "Failed to connect!";
}
8、QHostAddress

QHostAddress类封装了IP地址和主机名,它可以用于指定网络协议中的IP地址和主机名;

包含属性:

  • Any:通配符IP地址,表示任何地址;
  • LocalHost:本地主机IP地址;
  • Broadcast:广播地址;
  • Null:空地址,无效地址;

包含方法:

  • setAddress函数:设置IP地址;
  • setHostName函数:设置主机名;
  • toString函数:返回IP地址或主机名的字符串表示形式;

使用QHostAddress类向服务器发送消息:

QTcpSocket* socket = new QTcpSocket(this);
socket->connectToHost(QHostAddress("127.0.0.1"), 1234);if(socket->waitForConnected()) {QString message = "Hello World!";socket->write(message.toUtf8());socket->waitForBytesWritten();
}
else {qDebug() << "Failed to connect!";
}

使用QHostAddress类处理接收到的消息:

void MyUdpSocketClass::readDatagrams()
{while (socket->hasPendingDatagrams()) {QByteArray datagram;datagram.resize(socket->pendingDatagramSize());QHostAddress sender;quint16 senderPort;socket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);qDebug() << "Received message from" << sender.toString() << ":" << senderPort << datagram;}
}
9、QUdpSocket

QUdpSocket类实现了一个UDP套接字,它可以通过使用无连接的数据报套接字进行通信;

包含属性:

  • LocalAddress:本地地址;
  • LocalPort:本地端口号;
  • PeerAddress:远程主机地址;
  • PeerPort:远程主机端口号;

包含方法:

  • bind函数:绑定到指定的IP地址和端口号,以便接收传入数据报;
  • writeDatagram函数:发送数据报;
  • readDatagram函数:从套接字读取数据报;
  • state函数:返回套接字的状态;

创建一个QUdpSocket对象并发送消息:

QUdpSocket* socket = new QUdpSocket(this);
QHostAddress address("127.0.0.1");
quint16 port = 1234;QString message = "Hello World!";socket->writeDatagram(message.toUtf8(), address, port);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_103068.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R基础函数概览(一)

rep 函数形式&#xff1a;rep(x, time , length , each ,) 参数说明&#xff1a; x&#xff1a;代表的是你要进行复制的对象&#xff0c;可以是一个向量或者是一个因子。 times&#xff1a;代表的是复制的次数&#xff0c;只能为正数。负数以及NA值都会为错误值。复制是指的…

云原生(docker+k8s+阿里云)-Docker

Gitee-Kubernetes学习 kubectl备忘清单 k8s官方文档-task [云原生-kubectl命令详解] ingress详解 ingress官方文档 云原生-语雀-架构师第一课 从Docker到Kubernetes进阶-社区 云计算学习路线-阿里云大学 如上图&#xff0c;服务器有公网ip和私网ip&#xff0c;公网ip是外部访问…

Ubuntu20.04使用多卡训练HyperNetwork模型和LoRA模型全流程及疑难问题解决方案

目录 一. LoRA模型多卡训练1.1 安装xformer等库1.2 设置路径1.3 多卡训练 二. LoRA模型多卡训练疑难报错解决方案多卡训练报错 软硬件配置&#xff1a; CPU: AMD 5800 8core 16Thread GPU: NVIDIA RTX 3090 *1 NVIDIA TITAN RTX *1 OS: Ubuntu20.04 一. LoRA模型多卡训练 1.1 …

一篇终结synchronized

一&#xff1a;基本原理 Java对象在内存中由两部分组成 &#xff1a; 1 是成员变量 2 是对象头&#xff0c;以32位虚拟机介绍&#xff1a;此时对象头是64位&#xff0c;即8字节 其中32个字节代表 mark word 另外32个字节代表klass word分别是什么意思呢&#xff1f; 1 klass …

写题总结1

先把自己写完的总结一下&#xff1a; 题目一&#xff1a; 猫儿园的告示牌上贴着 ab 大小的矩形广告纸。猫猫对广告不感兴趣&#xff0c;她想知道能否用 cd 的矩形白纸完全覆盖这个广告。猫猫可以对白纸进行平移、旋转&#xff0c;但不能折叠或撕开等。如果可以完全覆盖输出 YE…

滴水逆向3期笔记与作业——01汇编

防止OneNote丢失。 海哥牛逼。 01汇编笔记 01进制进制定义10-2进制转换八进制 02数据宽度/逻辑运算数据宽度与存储逻辑运算计算机做加法的本质作业 03通用寄存器_内存读写通用寄存器表通用寄存器图内存读写计算机操作系统位数意义 04内存地址_堆栈寻址公式PUSH指令POP指令作业 …

【IAR工程】STM8S基于ST标准库读取DHT11数据

【IAR工程】STM8S基于ST标准库读取DHT11数据 ✨申明&#xff1a;本文章仅发表在CSDN网站&#xff0c;任何其他网站&#xff0c;未注明来源&#xff0c;见此内容均为盗链和爬取&#xff0c;请多多尊重和支持原创!&#x1f341;对于文中所提供的相关资源链接将作不定期更换。&…

4月有8本SCIE期刊被剔除(附MDPI/Frontiers/Hindawi最新在检期刊)

2023年4月SCI、SSCI期刊目录更新 2023年4月18日&#xff0c;科睿唯安更新了WOS期刊目录&#xff0c;继上次3月WOS期刊目录剔除50本SCIE&SSCI期刊之后&#xff0c;此次4月更新又有8本SCIE期刊发生变动&#xff0c;其中有4本期刊被踢出SCIE数据库&#xff0c;4本期刊更改了名…

流程图拖拽视觉编程--概述

一般的机器视觉平台采用纯代码的编程方式&#xff0c;如opencv、halcon&#xff0c;使用门槛高、难度大、定制性强、开发周期长&#xff0c;因此迫切需要一个低代码开发的视觉应用平台。AOI缺陷检测的对象往往缺陷种类多&#xff0c;将常用的图像处理算子封装成图形节点,如抓直…

Android 系统架构大图

android的系统架构和其操作系统一样&#xff0c;采用了分层的架构。从架构图看&#xff0c;android分为四个层&#xff0c;从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux核心层。 1.应用程序 Android会同一系列核心应用程序包一起发布&#xff0c;该应用…

确定因果随机森林的树木数量 the number of trees

前言 推断因果性和分析异质性是统计学家在处理混杂任务中的圣杯。传统且主流的方法有:倾向性评分、分层分享、比例风险模型等。新的方法也有很多,代表就是:因果随机森林。这种算法,浅看难度一般,深入探索发现坑还是很多的。这篇博客不对算法做深入探讨,仅仅是我在阅读文…

Nautilus Chain :基于模块化架构的Layer3正在走向成熟

Nautilus Chain 是一个基于 Eclipse 和 Celestia 构建的模块化 Layer3 链。作为定位在 Layer0 的链基建概念&#xff0c;Eclipse 和 Celestia 为面向未来的区块链扩容技术提供了一套开发工具和基础框架。尽管这种前沿技术过去一直处于概念验证阶段&#xff0c;尚未推出适用于大…

Java并发(三)----创建线程的三种方式及查看进程线程

一、直接使用 Thread // 创建线程对象 Thread t new Thread() {public void run() {// 要执行的任务} }; // 启动线程 t.start(); 例如&#xff1a; // 构造方法的参数是给线程指定名字&#xff0c;推荐 Thread t1 new Thread("t1") {Override// run 方法内实现…

手把手教你PXE高效网络装机、Kickstart无人值守安装(详细版)

目录 一、部署PXE远程安装服务1.1PXE定义1.2PXE服务优点1.3搭建网络体系前提条件1.4 搭建PXE远程安装服务器 二. 实验2.1 服务器操作2.2 安装启动TFTP服务并修改TFTP服务的配置文件2.3 安装并启用DHCP服务2.4 准备linux内核&#xff0c;初始化镜像文件2.5 准备PXE引导程序2.6 安…

22、Tweak原理及部分逆向防护

一、Tweak原理 1.1 Tweak产物.dylib 执行make命令时,在 .theos的隐藏目录中,编译出obj/debug目录,包含 arm64、arm64e两种架构,同时生成readbadges.dylib动态库 在arm64、arm64e目录下,有各自架构的readbadges.dylib,而debug目录下的readbadges.dylib,是一个胖二进制文件 fi…

【Java-01】深入浅出匿名对象 , 继承 , 抽象类

主要内容 面向对象回顾 匿名对象介绍 面向对象特征 - 继承 抽象类的使用 模板设计模式 1 面向对象回顾 面向对象的核心思想是什么 ? 用代码来模拟现实生活中的事物 , 比如学生类表示学生事物 , 对象表示的就是具体的学生 , 有了类就可以描述万千世界所有的事物了 现有的…

看完这篇文章你就彻底懂啦{保姆级讲解}-----(LeetCode刷题142环形链表II) 2023.4.24

目录 前言算法题&#xff08;LeetCode刷题142环形链表II&#xff09;—&#xff08;保姆级别讲解&#xff09;分析题目&#xff1a;算法思想环形链表II代码&#xff1a;补充 结束语 前言 本文章一部分内容参考于《代码随想录》----如有侵权请联系作者删除即可&#xff0c;撰写…

前端食堂技术周刊第 80 期:Vite 4.3、Node.js 20、TS 5.1 Beta、Windi CSS 即将落幕

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;东坡肉 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 本期摘要 Vite 4.3Node.js 20TypeScript 5.1 BetaWindi CSS 即将落幕Pretty TypeScri…

中医脉诊仪:结合传统与现代技术的诊断工具

一、引言 随着科技的不断发展&#xff0c;医学领域也取得了举世瞩目的进步。中医作为一种古老的医学体系&#xff0c;始终保持着其独特的魅力。脉诊作为中医诊断的重要方法之一&#xff0c;历经千年的发展和传承&#xff0c;如今在现代科技的助力下&#xff0c;诞生了中医脉诊…

信息安全复习六:公开密钥密码学

一、章节梗概 1.公开密钥密码模型的基本原理 2.两个算法&#xff1a;RSA&D-H算法 主要内容 1.对称密钥密码的密钥交换问题 2.公钥密码模型的提出 3.设计公钥密码的基本要求 4.数字签名 5.RSA算法 6.公钥密码的特征总结 二、对称密钥密码 对称加密算法中&#xff0c;数据…