Qt的常用类

Qt的常用类

文章目录

Qt的常用类1、QFile 是一个文件I/O类,用于读写文件;2、QPainter 是一个绘图类,用于绘制各种图形;3、QPropertyAnimation 是一个属性动画类,用于在时间内更改窗口小部件的属性值;5、QTcpServer,TCP服务器6、QTcpSocket 实现了一个TCP套接字7、QHostAddress 指定网络协议中的IP地址和主机名8、QUdpSocket 实现了一个UDP套接字

Qt的常用类

1、QFile 是一个文件I/O类,用于读写文件;

包含属性:

fileName:文件名; 包含方法:

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

使用write()函数,创建文件:

#include

#include

#include

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv);

// 设置文件名

QString filename = "qq.txt";

// 实例化 QFile 对象并设置文件名

QFile file(filename);

// 打开文件

if (file.open(QIODevice::WriteOnly | QIODevice::Text))

{

// 写入数据到文件中

QString data = "Hello World!";

file.write(data.toUtf8());

// 关闭文件

file.close();

qDebug() << "Data has been written to file successfully.";

}

else

{

qWarning() << "Failed to open file: " << file.errorString();

}

return a.exec();

}

使用readAll()函数,读文件:

#include

#include

#include

int main(int argc, char *argv[])

{

QApplication app(argc, argv);

QFile file("qq.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

#include

#include

#include

int main(int argc, char *argv[])

{

QApplication app(argc, argv); // 创建应用程序对象

// 创建像素映射图对象,并设置其大小为 400x400 像素

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 是一个属性动画类,用于在时间内更改窗口小部件的属性值;

包含属性:

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

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

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

#include

#include

#include

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(10000);

animation.setStartValue(QRect(50, 50, 150, 60));

animation.setEndValue(QRect(500, 300, 150, 60));

animation.start();

window.show();

return app.exec();

}

4、QThread,多线程

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

包含方法:

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

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

#include

#include

#include

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();

}

5、QTcpServer,TCP服务器

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();

});

6、QTcpSocket 实现了一个TCP套接字

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

套接字:

套接字是网络编程中的一种通信机制,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程,套接字可以分为流格式套接字(SOCK_STREAM)和数据报格式套接字(SOCK_DGRAM),分别对应TCP协议和UDP协议:

TCP套接字是一种面向连接的、可靠的、基于字节流的传输层通信协议,使用TCP套接字通信需要经过创建连接、数据传送、终止连接三个步骤,TCP套接字使用SOCK_STREAM类型的套接字,对应TCP协议,TCP套接字可以保证数据的正确性和顺序,但是传输效率较低;UDP套接字是一种无连接的、不可靠的、基于数据报的传输层通信协议,使用UDP套接字通信不需要建立连接,只需要发送和接收数据报,UDP套接字使用SOCK_DGRAM类型的套接字,对应UDP协议,UDP套接字强调快速传输而非传输顺序,传输的数据可能丢失或损坏,但是传输效率较高;

包含属性:

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!";

}

7、QHostAddress 指定网络协议中的IP地址和主机名

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;

}

}

8、QUdpSocket 实现了一个UDP套接字

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);

相关推荐

刷机软件哪个好
365比分下载

刷机软件哪个好

📅 07-11 👁️ 5869
联通号码激活需要多久
365速发登录入口

联通号码激活需要多久

📅 07-06 👁️ 5258
微信浮窗功能怎么用?在哪里设置(微信开启浮窗是什么意思)