Clases comunes de Qt

Clases comunes de Qt
1. QFile es una clase de E/S de archivos para leer y escribir archivos;
  • Contiene atributos:

    • fileName:Nombre del archivo;
  • Incluir método:

    • open(QIODevice::OpenMode mode): abre el archivo para lectura o escritura;
    • close(): cierra el archivo;
    • readAll(): devuelve todos los datos del archivo;
    • write(const QByteArray &data): escribir datos en el archivo;

Utilice la función write() para crear un archivo:

#include <QCoreApplication>
#include <QFile>
#include <QDebug>

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

Utilice la función readAll() para leer el archivo:

#include <QApplication>
#include <QFile>
#include <QDebug>

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 es una clase de dibujo para dibujar varios gráficos;
  • Incluir método:

    • begin(QPaintDevice* device): especifique el dispositivo en el que dibujar;
    • end(): dibujo final;
    • drawText(int x, int y, const QString &text): Dibujar texto en la posición especificada;
    • drawLine(int x1, int y1, int x2, int y2): Dibujar una línea recta;

Cree una instancia de QPainter y use la función begin() para configurar el dispositivo de dibujo, luego use la función de dibujo para dibujar y use end() para finalizar el dibujo:

#include <QApplication>
#include <QPainter>
#include <QPixmap>
#include <QLabel>

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 es una clase de animación de propiedad utilizada para cambiar el valor de propiedad de un widget en el tiempo;
  • Contiene atributos:

    • targetObject:objetivo;
    • propertyName: nombre de atributo de destino;
  • Incluir método:

    • setDuration(int msecs): Establecer la duración de la animación (milisegundos);
    • setStartValue(const QVariant &value): establece el valor de inicio de la animación;
    • setEndValue(const QVariant &value): establece el valor final de la animación;
    • start(): iniciar animación;

Cree una instancia de QPropertyAnimation y establezca el objeto de destino y el nombre de propiedad para él, luego use setStartValue() y setEndValue() para establecer el valor inicial y el valor final, y use setDuration() para establecer la duración de la animación (en milisegundos), y finalmente use el función start() para iniciar la animación:

#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(10000);
    animation.setStartValue(QRect(50, 50, 150, 60));
    animation.setEndValue(QRect(500, 300, 150, 60));
    animation.start();

    window.show();
    return app.exec();
}

4, QThread, multihilo

QThread es una clase de subprocesos múltiples utilizada para ejecutar un objeto en un subproceso separado;

  • Incluir método:

    • run(): iniciar hilo;
    • sleep(unsigned long secs): Hacer que el subproceso duerma durante el número de segundos especificado;
    • terminate(): termina la ejecución del hilo;

Cree una nueva clase derivada de QThread y reescriba la función run() para implementar la función que debe ejecutarse en un subproceso separado, luego cree una instancia de esta clase y llame a la función start() para iniciar el subproceso:

#include <QApplication>
#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();
}

5. QTcpServer, servidor TCP

La clase QTcpServer implementa un servidor TCP, que puede escuchar cualquier conexión de cliente que llegue al puerto especificado y crear un QTcpSocket para comunicarse con el cliente;

Contiene atributos:

  • serverName: el nombre del servidor;
  • maxPendingConnections: el número máximo de conexiones permitidas en la cola de conexiones en espera;
  • serverAddress: dirección del servidor, que se puede establecer en un nombre de host específico o dirección IP;
  • serverPort: número de puerto del servidor;

Incluir método:

  • función de escucha: escucha el puerto, espera la solicitud de conexión del cliente;
  • función de aceptación: acepta la solicitud de conexión del cliente;
  • función hasPendingConnections: determina si hay solicitudes de conexión de clientes pendientes;
  • función nextPendingConnection: devuelve la próxima conexión pendiente como un nuevo objeto QTcpSocket;

Cree un servidor y comience a escuchar las solicitudes de conexión del cliente:

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 implementa un socket TCP

La clase QTcpSocket implementa un socket TCP, que puede establecer una conexión TCP con un host remoto y enviar y recibir datos;

enchufe:

El zócalo es un mecanismo de comunicación en la programación de redes y es la unidad de operación básica de la comunicación de red compatible con TCP/IP. Se puede considerar como el punto final de la comunicación bidireccional entre procesos entre diferentes hosts. En pocas palabras, son las dos partes de comunicación Una especie de acuerdo, use las funciones relevantes en el zócalo para completar el proceso de comunicación, el zócalo se puede dividir en un zócalo de formato de flujo (SOCK_STREAM) y un zócalo de formato de datagrama (SOCK_DGRAM), correspondiente al protocolo TCP y el Protocolo UDP:

  • El socket TCP es un protocolo de comunicación de la capa de transporte basado en flujo de bytes, confiable y orientado a la conexión. El uso de la comunicación del socket TCP requiere tres pasos: creación de la conexión, transmisión de datos y finalización de la conexión. El socket TCP usa sockets de tipo SOCK_STREAM, correspondientes al protocolo TCP , los sockets TCP pueden garantizar la exactitud y el orden de los datos, pero la eficiencia de transmisión es baja;
  • El socket UDP es un protocolo de comunicación de capa de transporte basado en datagramas, no confiable y sin conexión. La comunicación del socket UDP no necesita establecer una conexión, solo necesita enviar y recibir datagramas. El socket UDP usa el tipo SOCK_DGRAM El socket corresponde al protocolo UDP. El socket UDP enfatiza la transmisión rápida en lugar del orden de transmisión. Los datos transmitidos pueden perderse o dañarse, pero la eficiencia de transmisión es alta;

Contiene atributos:

  • localAddress: dirección local;
  • localPort: número de puerto local;
  • peerAddress: dirección del host remoto;
  • peerPort: número de puerto del host remoto;

Incluir método:

  • función connectToHost: establece una conexión TCP con el host especificado;
  • Función desconectarDeHost: cerrar la conexión;
  • función de escritura: enviar datos al socket;
  • función readAll: lee todos los datos disponibles del socket y regresa;
  • función de estado: devuelve el estado del socket;

Cree un objeto QTcpSocket y conéctese al servidor remoto:

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 especifica la dirección IP y el nombre de host en el protocolo de red

La clase QHostAddress encapsula la dirección IP y el nombre de host, que se pueden usar para especificar la dirección IP y el nombre de host en el protocolo de red;

Contiene atributos:

  • Cualquiera: dirección IP comodín, lo que significa cualquier dirección;
  • LocalHost: dirección IP del host local;
  • Difusión: dirección de difusión;
  • Nulo: dirección vacía, dirección inválida;

Incluir método:

  • función setAddress: establece la dirección IP;
  • Función setHostName: establece el nombre del host;
  • función toString: devuelve la representación de cadena de la dirección IP o el nombre de host;

Envíe un mensaje al servidor utilizando la clase 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!";
}

Use la clase QHostAddress para procesar los mensajes recibidos:

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 implementa un socket UDP

La clase QUdpSocket implementa un socket UDP que puede comunicarse mediante un socket de datagrama sin conexión;

Contiene atributos:

  • LocalAddress: dirección local;
  • LocalPort: número de puerto local;
  • PeerAddress: dirección de host remoto;
  • PeerPort: número de puerto del host remoto;

Incluir método:

  • función de enlace: enlace a la dirección IP y número de puerto especificados para recibir datagramas entrantes;
  • función writeDatagram: enviar datagrama;
  • función readDatagram: lee el datagrama del socket;
  • función de estado: devuelve el estado del socket;

Cree un objeto QUdpSocket y envíe un mensaje:

QUdpSocket* socket = new QUdpSocket(this);
QHostAddress address("127.0.0.1");
quint16 port = 1234;

QString message = "Hello World!";

socket->writeDatagram(message.toUtf8(), address, port);

Supongo que te gusta

Origin blog.csdn.net/qq_33867131/article/details/130347936
Recomendado
Clasificación