En esta página

QSerialPort Class

Proporciona funciones para acceder a los puertos serie. Más...

Cabecera: #include <QSerialPort>
CMake: find_package(Qt6 REQUIRED COMPONENTS SerialPort)
target_link_libraries(mytarget PRIVATE Qt6::SerialPort)
qmake: QT += serialport
Hereda: QIODevice

Nota: Todas las funciones de esta clase son reentrantes.

Tipos Públicos

enum BaudRate { Baud1200, Baud2400, Baud4800, Baud9600, Baud19200, …, Baud115200 }
enum DataBits { Data5, Data6, Data7, Data8 }
enum Direction { Input, Output, AllDirections }
flags Directions
enum FlowControl { NoFlowControl, HardwareControl, SoftwareControl }
enum Parity { NoParity, EvenParity, OddParity, SpaceParity, MarkParity }
enum PinoutSignal { NoSignal, DataTerminalReadySignal, DataCarrierDetectSignal, DataSetReadySignal, RingIndicatorSignal, …, SecondaryReceivedDataSignal }
flags PinoutSignals
enum SerialPortError { NoError, DeviceNotFoundError, PermissionError, OpenError, NotOpenError, …, UnknownError }
enum StopBits { OneStop, OneAndHalfStop, TwoStop }

Propiedades

Funciones públicas

QSerialPort(QObject *parent = nullptr)
QSerialPort(const QSerialPortInfo &serialPortInfo, QObject *parent = nullptr)
QSerialPort(const QString &name, QObject *parent = nullptr)
virtual ~QSerialPort()
qint32 baudRate(QSerialPort::Directions directions = AllDirections) const
QBindable<QSerialPort::DataBits> bindableDataBits()
QBindable<QSerialPort::SerialPortError> bindableError() const
QBindable<QSerialPort::FlowControl> bindableFlowControl()
QBindable<bool> bindableIsBreakEnabled()
QBindable<QSerialPort::Parity> bindableParity()
QBindable<QSerialPort::StopBits> bindableStopBits()
bool clear(QSerialPort::Directions directions = AllDirections)
void clearError()
QSerialPort::DataBits dataBits() const
QSerialPort::SerialPortError error() const
QSerialPort::FlowControl flowControl() const
bool flush()
QSerialPort::Handle handle() const
bool isBreakEnabled() const
bool isDataTerminalReady()
bool isRequestToSend()
QSerialPort::Parity parity() const
QSerialPort::PinoutSignals pinoutSignals()
QString portName() const
qint64 readBufferSize() const
bool setBaudRate(qint32 baudRate, QSerialPort::Directions directions = AllDirections)
bool setBreakEnabled(bool set = true)
bool setDataBits(QSerialPort::DataBits dataBits)
bool setDataTerminalReady(bool set)
bool setFlowControl(QSerialPort::FlowControl flowControl)
bool setParity(QSerialPort::Parity parity)
void setPort(const QSerialPortInfo &serialPortInfo)
void setPortName(const QString &name)
void setReadBufferSize(qint64 size)
bool setRequestToSend(bool set)
void setSettingsRestoredOnClose(bool restore)
bool setStopBits(QSerialPort::StopBits stopBits)
(since 6.10) void setWriteBufferSize(qint64 size)
bool settingsRestoredOnClose() const
QSerialPort::StopBits stopBits() const
(since 6.10) qint64 writeBufferSize() const

Funciones públicas reimplementadas

virtual qint64 bytesAvailable() const override
virtual qint64 bytesToWrite() const override
virtual bool canReadLine() const override
virtual void close() override
virtual bool isSequential() const override
virtual bool open(QIODeviceBase::OpenMode mode) override
virtual bool waitForBytesWritten(int msecs = 30000) override
virtual bool waitForReadyRead(int msecs = 30000) override

Señales

void baudRateChanged(qint32 baudRate, QSerialPort::Directions directions)
void breakEnabledChanged(bool set)
void dataBitsChanged(QSerialPort::DataBits dataBits)
void dataTerminalReadyChanged(bool set)
void errorOccurred(QSerialPort::SerialPortError error)
void flowControlChanged(QSerialPort::FlowControl flow)
void parityChanged(QSerialPort::Parity parity)
void requestToSendChanged(bool set)
(since 6.9) void settingsRestoredOnCloseChanged(bool restore)
void stopBitsChanged(QSerialPort::StopBits stopBits)

Funciones protegidas reimplementadas

virtual qint64 readData(char *data, qint64 maxSize) override
virtual qint64 readLineData(char *data, qint64 maxSize) override
virtual qint64 writeData(const char *data, qint64 maxSize) override

Descripción Detallada

Puede obtener información sobre los puertos serie disponibles utilizando la clase de ayuda QSerialPortInfo, que permite una enumeración de todos los puertos serie del sistema. Esto es útil para obtener el nombre correcto del puerto serie que desea utilizar. Puede pasar un objeto de la clase helper como argumento a los métodos setPort() o setPortName() para asignar el dispositivo serie deseado.

Después de configurar el puerto, puede abrirlo en modo de sólo lectura (r/o), sólo escritura (w/o), o lectura-escritura (r/w) utilizando el método open().

Nota: El puerto serie siempre se abre con acceso exclusivo (es decir, ningún otro proceso o hilo puede acceder a un puerto serie ya abierto).

Usa el método close() para cerrar el puerto y cancelar las operaciones de E/S.

Habiéndose abierto exitosamente, QSerialPort intenta determinar la configuración actual del puerto y se inicializa a si mismo. Puedes reconfigurar el puerto a la configuración deseada usando los métodos setBaudRate(), setDataBits(), setParity(), setStopBits(), y setFlowControl().

Hay un par de propiedades para trabajar con las señales pinout a saber: QSerialPort::dataTerminalReady, QSerialPort::requestToSend. También es posible utilizar el método pinoutSignals() para consultar el conjunto actual de señales pinout.

Una vez que sepas que los puertos están listos para leer o escribir, puedes utilizar los métodos read() o write(). Alternativamente también se pueden invocar los métodos de conveniencia readLine() y readAll(). Si no se leen todos los datos a la vez, los datos restantes estarán disponibles para mas tarde cuando los nuevos datos entrantes se añadan al buffer de lectura interno del QSerialPort. Puedes limitar el tamaño del buffer de lectura usando setReadBufferSize().

QSerialPort provee un conjunto de funciones que suspenden la llamada hasta que ciertas señales son emitidas. Estas funciones pueden ser usadas para implementar puertos serie de bloqueo:

  • waitForReadyRead() bloquea llamadas hasta que nuevos datos estén disponibles para lectura.
  • waitForBytesWritten() bloquea las llamadas hasta que una carga de datos ha sido escrita en el puerto serie.

Véase el siguiente ejemplo:

qint64 numReadTotal = 0;
char buffer[50];

for (;;) {
    const qint64 numRead  = serial.read(buffer, 50);

    // Do whatever with the array

    numReadTotal += numRead;
    if (numRead == 0 && !serial.waitForReadyRead())
        break;
}

Si waitForReadyRead() devuelve false, la conexión se ha cerrado o se ha producido un error.

Si se produce un error en cualquier momento, QSerialPort emitirá la señal errorOccurred(). También puedes llamar a error() para encontrar el tipo de error que ocurrió por última vez.

Programar con un puerto serie bloqueante es radicalmente diferente a programar con un puerto serie no bloqueante. Un puerto serie bloqueante no requiere un bucle de eventos y típicamente conduce a un código más simple. Sin embargo, en una aplicación GUI, un puerto serie bloqueante sólo debería ser usado en hilos no-GUI, para evitar congelar la interfaz de usuario.

Para más detalles sobre estos enfoques, consulte las aplicaciones de ejemplo.

La clase QSerialPort también puede usarse con los operadores de flujo de QTextStream y QDataStream(operator<<() y operator>>()). Hay un problema a tener en cuenta, sin embargo: asegúrate de que hay suficientes datos disponibles antes de intentar leer usando el operador sobrecargado operator>>().

Véase también QSerialPortInfo.

Documentación de tipos de miembros

enum QSerialPort::BaudRate

Este enum describe la velocidad en baudios con la que funciona el dispositivo de comunicación.

Nota: Sólo las velocidades en baudios estándar más comunes se enumeran en este enum.

ConstanteValorDescripción
QSerialPort::Baud120012001200 baudios.
QSerialPort::Baud240024002400 baudios.
QSerialPort::Baud480048004800 baudios.
QSerialPort::Baud960096009600 baudios.
QSerialPort::Baud192001920019200 baudios.
QSerialPort::Baud384003840038400 baudios.
QSerialPort::Baud576005760057600 baudios.
QSerialPort::Baud115200115200115200 baudios.

Véase también QSerialPort::baudRate.

enum QSerialPort::DataBits

Este enum describe el número de bits de datos utilizados.

ConstanteValorDescripción
QSerialPort::Data55El número de bits de datos en cada carácter es 5. Se utiliza para el código Baudot. Generalmente sólo tiene sentido con equipos antiguos como teleimpresoras.
QSerialPort::Data66El número de bits de datos en cada carácter es 6. Se utiliza raramente.
QSerialPort::Data77El número de bits de datos en cada carácter es 7. Se utiliza para ASCII verdadero. Generalmente sólo tiene sentido con equipos antiguos como las teleimpresoras.
QSerialPort::Data88El número de bits de datos en cada carácter es 8. Se utiliza para la mayoría de tipos de datos, ya que este tamaño coincide con el de un byte. Su uso es casi universal en las aplicaciones más recientes.

Véase también QSerialPort::dataBits.

enum QSerialPort::Dirección
flags QSerialPort::Direcciones

Este enum describe las posibles direcciones de la transmisión de datos.

Nota: Esta enumeración se usa para configurar la velocidad en baudios del dispositivo separadamente para cada dirección en algunos sistemas operativos (por ejemplo, POSIX-like).

ConstanteValorDescripción
QSerialPort::Input1Dirección de entrada.
QSerialPort::Output2Dirección de salida.
QSerialPort::AllDirectionsInput | OutputSimultáneamente en dos direcciones.

El tipo Directions es un typedef para QFlags<Direction>. Almacena una combinación OR de valores de Dirección.

enum QSerialPort::FlowControl

Este enum describe el control de flujo utilizado.

ConstanteValorDescripción
QSerialPort::NoFlowControl0Sin control de flujo.
QSerialPort::HardwareControl1Control de flujo por hardware (RTS/CTS).
QSerialPort::SoftwareControl2Control de flujo por software (XON/XOFF).

Véase también QSerialPort::flowControl.

enum QSerialPort::Parity

Este enum describe el esquema de paridad utilizado.

ConstanteValorDescripción
QSerialPort::NoParity0No se envía ningún bit de paridad. Esta es la configuración de paridad más común. La detección de errores es gestionada por el protocolo de comunicación.
QSerialPort::EvenParity2El número de bits de 1 en cada carácter, incluido el bit de paridad, es siempre par.
QSerialPort::OddParity3El número de bits de 1 en cada carácter, incluido el bit de paridad, es siempre impar. Garantiza que se produzca al menos una transición de estado en cada carácter.
QSerialPort::SpaceParity4Paridad espacial. El bit de paridad se envía en la condición de señal de espacio. No proporciona información de detección de errores.
QSerialPort::MarkParity5Paridad de marca. El bit de paridad se pone siempre en la condición de señal de marca (1 lógico). No proporciona información de detección de errores.

Véase también QSerialPort::parity.

enum QSerialPort::PinoutSignal
flags QSerialPort::PinoutSignals

Este enum describe las posibles señales de pinout RS-232.

ConstanteValorDescripción
QSerialPort::NoSignal0x00Ninguna línea activa
QSerialPort::DataTerminalReadySignal0x04DTR (Terminal de datos listo).
QSerialPort::DataCarrierDetectSignal0x08DCD (Detección de portadora de datos).
QSerialPort::DataSetReadySignal0x10DSR (Data Set Ready).
QSerialPort::RingIndicatorSignal0x20RNG (Ring Indicator).
QSerialPort::RequestToSendSignal0x40RTS (solicitud de envío).
QSerialPort::ClearToSendSignal0x80CTS (Despejar para enviar).
QSerialPort::SecondaryTransmittedDataSignal0x100STD (Datos secundarios transmitidos).
QSerialPort::SecondaryReceivedDataSignal0x200SRD (Datos secundarios recibidos).

El tipo PinoutSignals es un typedef para QFlags<PinoutSignal>. Almacena una combinación OR de valores PinoutSignal.

Véase también pinoutSignals(), QSerialPort::dataTerminalReady, y QSerialPort::requestToSend.

enum QSerialPort::SerialPortError

Este enum describe los errores que puede contener la propiedad QSerialPort::error.

ConstanteValorDescripción
QSerialPort::NoError0No se ha producido ningún error.
QSerialPort::DeviceNotFoundError1Se ha producido un error al intentar abrir un dispositivo no existente.
QSerialPort::PermissionError2Se ha producido un error al intentar abrir un dispositivo ya abierto por otro proceso o por un usuario que no tiene suficientes permisos y credenciales para abrirlo.
QSerialPort::OpenError3Se ha producido un error al intentar abrir un dispositivo ya abierto en este objeto.
QSerialPort::NotOpenError10Este error se produce cuando se ejecuta una operación que sólo puede realizarse con éxito si el dispositivo está abierto. Este valor se introdujo en QtSerialPort 5.2.
QSerialPort::WriteError4Se ha producido un error de E/S al escribir los datos.
QSerialPort::ReadError5Se ha producido un error de E/S al leer los datos.
QSerialPort::ResourceError6Se ha producido un error de E/S cuando un recurso deja de estar disponible, por ejemplo, cuando el dispositivo se retira inesperadamente del sistema.
QSerialPort::UnsupportedOperationError7La operación de dispositivo solicitada no está soportada o está prohibida por el sistema operativo en ejecución.
QSerialPort::TimeoutError9Se ha producido un error de tiempo de espera. Este valor se introdujo en QtSerialPort 5.2.
QSerialPort::UnknownError8Se ha producido un error no identificado.

Véase también QSerialPort::error.

enum QSerialPort::StopBits

Este enum describe el número de bits de parada utilizados.

ConstanteValorDescripción
QSerialPort::OneStop11 bit de parada.
QSerialPort::OneAndHalfStop31.5 bits de parada. Sólo para la plataforma Windows.
QSerialPort::TwoStop22 bits de parada.

Véase también QSerialPort::stopBits.

Documentación de propiedades

baudRate : qint32

Esta propiedad contiene la velocidad de transmisión de datos para la dirección deseada.

Si la configuración se realiza correctamente o se establece antes de abrir el puerto, devuelve true; en caso contrario devuelve false y establece un código de error que puede obtenerse accediendo al valor de la propiedad QSerialPort::error. Para establecer la velocidad en baudios, utilice la enumeración QSerialPort::BaudRate o cualquier valor qint32 positivo.

Nota: Si la configuración se establece antes de abrir el puerto, la configuración real del puerto serie se realiza automáticamente en el método QSerialPort::open() justo después de que la apertura del puerto tenga éxito.

Advertencia: Establecer la bandera AllDirections es soportado en todas las plataformas. Windows sólo soporta este modo.

Advertencia: Devuelve igual velocidad en baudios en cualquier dirección en Windows.

El valor por defecto es Baud9600, es decir, 9600 bits por segundo.

Funciones de acceso:

qint32 baudRate(QSerialPort::Directions directions = AllDirections) const
bool setBaudRate(qint32 baudRate, QSerialPort::Directions directions = AllDirections)

Señal de notificador:

void baudRateChanged(qint32 baudRate, QSerialPort::Directions directions)

[bindable] breakEnabled : bool

Nota: Esta propiedad admite enlaces QProperty.

Esta propiedad mantiene el estado de la línea de transmisión en break

Devuelve true en caso de éxito, false en caso contrario. Si la bandera es true entonces la línea de transmisión está en estado de ruptura; en caso contrario está en estado de no ruptura.

Nota: El puerto serie tiene que estar abierto antes de intentar establecer u obtener esta propiedad; en caso contrario devuelve false y establece el código de error NotOpenError. Esto es un poco inusual en comparación con la configuración regular de propiedades Qt de una clase. Sin embargo, este es un caso de uso especial ya que la propiedad se establece a través de la interacción con el kernel y el hardware. Por lo tanto, los dos escenarios no se pueden comparar completamente entre sí.

Funciones de acceso:

bool isBreakEnabled() const
bool setBreakEnabled(bool set = true)

Señal de notificador:

void breakEnabledChanged(bool set)

[bindable] dataBits : DataBits

Nota: Esta propiedad admite enlaces QProperty.

Esta propiedad contiene los bits de datos de una trama

Si la configuración es correcta o se establece antes de abrir el puerto, devuelve true; en caso contrario devuelve false y establece un código de error que puede obtenerse accediendo al valor de la propiedad QSerialPort::error.

Nota: Si la configuración se establece antes de abrir el puerto, la configuración real del puerto serie se realiza automáticamente en el método QSerialPort::open() justo después de que la apertura del puerto tenga éxito.

El valor por defecto es Data8, es decir, 8 bits de datos.

Funciones de acceso:

QSerialPort::DataBits dataBits() const
bool setDataBits(QSerialPort::DataBits dataBits)

Señal notificadora:

void dataBitsChanged(QSerialPort::DataBits dataBits)

dataTerminalReady : bool

Esta propiedad contiene el estado (alto o bajo) de la señal de línea DTR

Devuelve true en caso de éxito, false en caso contrario. Si la bandera es true entonces la señal DTR se pone en alto; en caso contrario en bajo.

Nota: El puerto serie tiene que estar abierto antes de intentar establecer u obtener esta propiedad; en caso contrario se devuelve false y el código de error se establece en NotOpenError.

Funciones de acceso:

bool isDataTerminalReady()
bool setDataTerminalReady(bool set)

Señal de notificador:

void dataTerminalReadyChanged(bool set)

Véase también pinoutSignals().

[bindable read-only] error : SerialPortError

Nota: Esta propiedad soporta QProperty bindings.

Esta propiedad contiene el estado de error del puerto serie

El estado del dispositivo de E/S devuelve un código de error. Por ejemplo, si open() devuelve false, o una operación de lectura/escritura devuelve -1, esta propiedad puede utilizarse para averiguar la razón por la que falló la operación.

El código de error se establece en el valor por defecto QSerialPort::NoError después de una llamada a clearError()

Funciones de acceso:

QSerialPort::SerialPortError error() const
void clearError()

Señal de notificador:

void errorOccurred(QSerialPort::SerialPortError error)

[bindable] flowControl : FlowControl

Nota: Esta propiedad soporta QProperty bindings.

Esta propiedad contiene el modo de control de flujo deseado

Si la configuración es correcta o se establece antes de abrir el puerto, devuelve true; en caso contrario devuelve false y establece un código de error que puede obtenerse accediendo al valor de la propiedad QSerialPort::error.

Nota: Si la configuración se establece antes de abrir el puerto, la configuración real del puerto serie se realiza automáticamente en el método QSerialPort::open() justo después de que la apertura del puerto tenga éxito.

El valor por defecto es NoFlowControl, es decir, sin control de flujo.

Funciones de acceso:

QSerialPort::FlowControl flowControl() const
bool setFlowControl(QSerialPort::FlowControl flowControl)

Señal notificadora:

void flowControlChanged(QSerialPort::FlowControl flow)

[bindable] parity : Parity

Nota: Esta propiedad soporta enlaces QProperty.

Esta propiedad contiene el modo de comprobación de paridad

Si la configuración es correcta o se establece antes de abrir el puerto, devuelve true; en caso contrario devuelve false y establece un código de error que puede obtenerse accediendo al valor de la propiedad QSerialPort::error.

Nota: Si la configuración se establece antes de abrir el puerto, la configuración real del puerto serie se realiza automáticamente en el método QSerialPort::open() justo después de que la apertura del puerto tenga éxito.

El valor por defecto es NoParity, es decir, sin paridad.

Atención: Algunos sistemas operativos UNIX (por ejemplo, macOS) no soportan la bandera CMSPAR. En estos sistemas, no es posible establecer la paridad Mark or Space.

Funciones de acceso:

QSerialPort::Parity parity() const
bool setParity(QSerialPort::Parity parity)

Señal de notificador:

void parityChanged(QSerialPort::Parity parity)

requestToSend : bool

Esta propiedad contiene el estado (alto o bajo) de la señal de línea RTS

Devuelve true en caso de éxito, false en caso contrario. Si la bandera es true entonces la señal RTS se pone en alto; si no, en bajo.

Nota: El puerto serie tiene que estar abierto antes de intentar establecer u obtener esta propiedad; de lo contrario se devuelve false y el código de error se establece en NotOpenError.

Nota: Un intento de controlar la señal RTS en el modo HardwareControl fallará con el código de error UnsupportedOperationError, porque la señal es controlada automáticamente por el controlador.

Funciones de acceso:

bool isRequestToSend()
bool setRequestToSend(bool set)

Señal notificadora:

void requestToSendChanged(bool set)

Véase también pinoutSignals().

[since 6.9] settingsRestoredOnClose : bool

Esta propiedad define si los parámetros del puerto deben ser restaurados al cerrarse o no

Después de abrir el puerto, la clase almacena en caché sus parámetros antes de aplicar los parámetros definidos por el usuario.

Si la propiedad es true, el puerto serie intenta restaurar los parámetros almacenados en caché antes de cerrar el puerto; en caso contrario, los parámetros almacenados en caché se descartan.

El valor por defecto es true.

Nota: Esta propiedad puede no tener efecto en algunos sistemas operativos. Por ejemplo, macOS parece restaurar siempre la configuración por defecto del puerto serie cuando se cierra el puerto.

Esta propiedad se introdujo en Qt 6.9.

Funciones de acceso:

bool settingsRestoredOnClose() const
void setSettingsRestoredOnClose(bool restore)

Señal de notificador:

void settingsRestoredOnCloseChanged(bool restore)

[bindable] stopBits : StopBits

Nota: Esta propiedad soporta QProperty bindings.

Esta propiedad contiene el número de bits de parada en una trama.

Si la configuración es correcta o se establece antes de abrir el puerto, devuelve true; en caso contrario devuelve false y establece un código de error que puede obtenerse accediendo al valor de la propiedad QSerialPort::error.

Nota: Si la configuración se establece antes de abrir el puerto, la configuración real del puerto serie se realiza automáticamente en el método QSerialPort::open() justo después de que la apertura del puerto tenga éxito.

El valor por defecto es OneStop, es decir, 1 bit de parada.

Funciones de acceso:

QSerialPort::StopBits stopBits() const
bool setStopBits(QSerialPort::StopBits stopBits)

Notificador de señal:

void stopBitsChanged(QSerialPort::StopBits stopBits)

Documentación de la función miembro

[explicit] QSerialPort::QSerialPort(QObject *parent = nullptr)

Construye un nuevo objeto de puerto serie con la dirección parent.

[explicit] QSerialPort::QSerialPort(const QSerialPortInfo &serialPortInfo, QObject *parent = nullptr)

Construye un nuevo objeto de puerto serie con el parent dado para representar el puerto serie con la clase de ayuda especificada serialPortInfo.

[explicit] QSerialPort::QSerialPort(const QString &name, QObject *parent = nullptr)

Construye un nuevo objeto puerto serie con el parent dado para representar el puerto serie con el name especificado.

El nombre debe tener un formato específico; véase el método setPort().

[virtual noexcept] QSerialPort::~QSerialPort()

Cierra el puerto serie, si es necesario, y luego destruye el objeto.

[signal] void QSerialPort::baudRateChanged(qint32 baudRate, QSerialPort::Directions directions)

Esta señal se emite después de cambiar la velocidad en baudios. La nueva tasa de baudios se pasa como baudRate y las direcciones como directions.

Nota: Señal notificadora para la propiedad baudRate.

Véase también QSerialPort::baudRate.

[override virtual] qint64 QSerialPort::bytesAvailable() const

Reimplementa: QIODevice::bytesAvailable() const.

Devuelve el número de bytes entrantes que están esperando ser leídos.

Véase también bytesToWrite() y read().

[override virtual] qint64 QSerialPort::bytesToWrite() const

Reimplementa: QIODevice::bytesToWrite() const.

Devuelve el número de bytes que están esperando a ser escritos. Los bytes se escriben cuando el control vuelve al bucle de eventos o cuando se llama a flush().

Véase también bytesAvailable() y flush().

[override virtual] bool QSerialPort::canReadLine() const

Reimplementa: QIODevice::canReadLine() const.

Devuelve true si se puede leer una línea de datos del puerto serie; en caso contrario devuelve false.

Véase también readLine().

bool QSerialPort::clear(QSerialPort::Directions directions = AllDirections)

Descarta todos los caracteres del búfer de salida o de entrada, dependiendo de las direcciones dadas directions. Esto incluye borrar los buffers internos de clase y los buffers UART (driver). También termina las operaciones de lectura o escritura pendientes. Si tiene éxito, devuelve true; en caso contrario devuelve false.

Nota: El puerto serie tiene que estar abierto antes de intentar borrar cualquier dato almacenado en el buffer; de lo contrario devuelve false y establece el código de error NotOpenError.

[override virtual] void QSerialPort::close()

Reimplementa: QIODevice::close().

Nota: El puerto serie tiene que estar abierto antes de intentar cerrarlo; de lo contrario, establece el código de error NotOpenError.

Véase también QIODevice::close().

[signal] void QSerialPort::dataBitsChanged(QSerialPort::DataBits dataBits)

Esta señal se emite después de cambiar los bits de datos de una trama. Los nuevos bits de datos de una trama se pasan como dataBits.

Nota: Señal notificadora de la propiedad dataBits.

Véase también QSerialPort::dataBits.

[signal] void QSerialPort::dataTerminalReadyChanged(bool set)

Esta señal se emite después de cambiar el estado (alto o bajo) de la señal de línea DTR. El nuevo estado (alto o bajo) de la señal de línea DTR se pasa como set.

Nota: Señal notificadora de la propiedad dataTerminalReady.

Véase también QSerialPort::dataTerminalReady.

[signal] void QSerialPort::errorOccurred(QSerialPort::SerialPortError error)

Esta señal se emite cuando se produce un error en el puerto serie. El error especificado describe el tipo de error que se ha producido.

Nota: Señal notificadora de la propiedad error.

Véase también QSerialPort::error.

[signal] void QSerialPort::flowControlChanged(QSerialPort::FlowControl flow)

Esta señal se emite después de cambiar el modo de control de flujo. El nuevo modo de control de flujo se pasa como flow.

Nota: Señal notificadora de la propiedad flowControl.

Véase también QSerialPort::flowControl.

bool QSerialPort::flush()

Esta función escribe tanto como sea posible desde el búfer de escritura interno al puerto serie subyacente sin bloquearse. Si se ha escrito algún dato, esta función devuelve true; en caso contrario devuelve false.

Llame a esta función para enviar los datos almacenados inmediatamente al puerto serie. El número de bytes escritos con éxito depende del sistema operativo. En la mayoría de los casos, esta función no necesita ser llamada, porque la clase QSerialPort comenzará a enviar los datos automáticamente una vez que el control es devuelto al bucle de eventos. En ausencia de un bucle de eventos, llame a waitForBytesWritten() en su lugar.

Nota: El puerto serie tiene que estar abierto antes de intentar vaciar cualquier dato almacenado en el buffer; de lo contrario devuelve false y establece el código de error NotOpenError.

Véase también write() y waitForBytesWritten().

QSerialPort::Handle QSerialPort::handle() const

Si la plataforma está soportada y el puerto serie está abierto, devuelve el manejador nativo del puerto serie; en caso contrario devuelve -1.

Advertencia: Esta función es sólo para uso experto; utilícela bajo su propia responsabilidad. Además, esta función no promete compatibilidad entre versiones menores de Qt.

[override virtual] bool QSerialPort::isSequential() const

Reimplementa: QIODevice::isSequential() const.

Devuelve siempre true. El puerto serie es un dispositivo secuencial.

[override virtual] bool QSerialPort::open(QIODeviceBase::OpenMode mode)

Reimplementa: QIODevice::open(QIODeviceBase::OpenMode mode).

Abre el puerto serie utilizando OpenMode mode, y devuelve true si tiene éxito; en caso contrario devuelve false y establece un código de error que puede obtenerse llamando al método error().

Si se abre el puerto, pero falla la configuración de los parámetros de puerto deseados, el método devuelve false y cierra el puerto automáticamente.

Atención: El mode tiene que ser QIODeviceBase::ReadOnly, QIODeviceBase::WriteOnly, o QIODeviceBase::ReadWrite. No se admiten otros modos.

Nota: Debido a razones históricas, tras una apertura exitosa se emite la señal errorOccurred() con el código de error NoError. Este comportamiento se conserva para mantener la compatibilidad con versiones anteriores.

Véase también QIODeviceBase::OpenMode y setPort().

[signal] void QSerialPort::parityChanged(QSerialPort::Parity parity)

Esta señal se emite después de cambiar el modo de comprobación de paridad. El nuevo modo de comprobación de paridad se pasa como parity.

Nota: Señal notificadora para la propiedad parity.

Véase también QSerialPort::parity.

QSerialPort::PinoutSignals QSerialPort::pinoutSignals()

Devuelve el estado de las señales de línea en un formato de mapa de bits.

A partir de este resultado, es posible asignar el estado de la señal deseada aplicando una máscara "AND", donde la máscara es el valor de enumeración deseado de QSerialPort::PinoutSignals.

Nota: Este método realiza una llamada al sistema, asegurando así que los estados de las señales de línea se devuelven correctamente. Esto es necesario cuando los sistemas operativos subyacentes no pueden proporcionar notificaciones adecuadas sobre los cambios.

Nota: El puerto serie tiene que estar abierto antes de intentar obtener las señales de pinout; de lo contrario devuelve NoSignal y establece el código de error NotOpenError.

Véase también QSerialPort::dataTerminalReady y QSerialPort::requestToSend.

QString QSerialPort::portName() const

Devuelve el nombre establecido por setPort() o pasado al constructor QSerialPort. Este nombre es corto, es decir, se extrae y convierte a partir de la ubicación del sistema de variables interno del dispositivo. El algoritmo de conversión es específico de cada plataforma:

PlataformaBreve descripción
WindowsElimina el prefijo "\\.\" o "//./" de la ubicación del sistema y devuelve el resto de la cadena.
Unix, BSDElimina el prefijo "/dev/" de la ubicación del sistema y devuelve el resto de la cadena.

Véase también setPortName(), setPort() y QSerialPortInfo::portName().

qint64 QSerialPort::readBufferSize() const

Devuelve el tamaño del búfer de lectura interno. Esto limita la cantidad de datos que el cliente puede recibir antes de llamar a los métodos read() o readAll().

Un tamaño de búfer de lectura de 0 (el valor predeterminado) significa que el búfer no tiene límite de tamaño, lo que garantiza que no se pierda ningún dato.

Véase también setReadBufferSize() y read().

[override virtual protected] qint64 QSerialPort::readData(char *data, qint64 maxSize)

Reimplementa: QIODevice::readData(char *data, qint64 maxSize).

[override virtual protected] qint64 QSerialPort::readLineData(char *data, qint64 maxSize)

Reimplementa: QIODevice::readLineData(char *data, qint64 maxSize).

[signal] void QSerialPort::requestToSendChanged(bool set)

Esta señal se emite después de cambiar el estado (alto o bajo) de la señal de línea RTS. El nuevo estado (alto o bajo) de la señal de línea RTS se pasa como set.

Nota: Señal notificadora de la propiedad requestToSend.

Véase también QSerialPort::requestToSend.

void QSerialPort::setPort(const QSerialPortInfo &serialPortInfo)

Establece el puerto almacenado en la instancia de información del puerto serie serialPortInfo.

Véase también portName() y QSerialPortInfo.

void QSerialPort::setPortName(const QString &name)

Establece el name del puerto serie.

El nombre del puerto serie se puede pasar como un nombre corto o como la ubicación larga del sistema si es necesario.

Véase también portName() y QSerialPortInfo.

void QSerialPort::setReadBufferSize(qint64 size)

Establece el tamaño del búfer de lectura interno de QSerialPort en size bytes.

Si el tamaño del búfer está limitado a un cierto tamaño, QSerialPort no almacenará más datos que ese tamaño. El caso especial de un tamaño de búfer de 0 significa que el búfer de lectura es ilimitado y todos los datos entrantes se almacenan en el búfer. Esta es la opción por defecto.

Esta opción es útil si los datos sólo se leen en determinados momentos (por ejemplo, en una aplicación de streaming en tiempo real) o si el puerto serie debe ser protegido contra la recepción de demasiados datos, lo que eventualmente puede causar que la aplicación se quede sin memoria.

Véase también readBufferSize() y read().

[since 6.10] void QSerialPort::setWriteBufferSize(qint64 size)

Establece el tamaño del búfer de escritura interno de QSerialPort en size bytes.

El envío de datos a través del puerto serie es relativamente lento, por lo que en la práctica, cuando se llama a write(), los datos no se envían inmediatamente. Primero se almacenan en un búfer intermedio y después se escriben en trozos.

Por lo tanto, un intento de escribir demasiados datos o escribir datos a una velocidad superior a la que el puerto serie subyacente puede manejar, puede llevar a una situación en la que el buffer interno crezca. Esto puede eventualmente causar que la aplicación se quede sin memoria, especialmente en un dispositivo con pocos recursos de memoria.

Este método permite limitar el buffer interno a un tamaño determinado. Si el siguiente intento de escritura excede la capacidad del buffer, el método write() devolverá la cantidad de bytes que realmente se almacenaron en el buffer. Es responsabilidad del usuario repetir el intento de escritura con el resto de los bytes después de recibir la señal bytesWritten(), o después de que el método waitForBytesWritten() devuelva true.

Pasar 0 a este método significa que el búfer de entrada no está limitado, y todos los datos entrantes se almacenan en el búfer. Este es el valor por defecto.

Esta función se introdujo en Qt 6.10.

Véase también writeBufferSize() y write().

[signal, since 6.9] void QSerialPort::settingsRestoredOnCloseChanged(bool restore)

Esta señal se emite después de cambiar la propiedad settingsRestoredOnClose. El parámetro restore contiene el nuevo valor de la propiedad.

Nota: Señal notificadora para la propiedad settingsRestoredOnClose.

Esta función se introdujo en Qt 6.9.

Véase también QSerialPort::settingsRestoredOnClose.

[signal] void QSerialPort::stopBitsChanged(QSerialPort::StopBits stopBits)

Esta señal se emite después de cambiar el número de bits de parada de una trama. El nuevo número de bits de parada en una trama se pasa como stopBits.

Nota: Señal notificadora de la propiedad stopBits.

Véase también QSerialPort::stopBits.

[override virtual] bool QSerialPort::waitForBytesWritten(int msecs = 30000)

Reimplementa: QIODevice::waitForBytesWritten(int msecs).

Esta función se bloquea hasta que se ha escrito al menos un byte en el puerto serie y se ha emitido la señal bytesWritten(). La función expirará después de msecs milisegundos; el tiempo por defecto es de 30000 milisegundos. Si msecs es -1, esta función no expirará.

La función devuelve true si se emite la señal bytesWritten(); en caso contrario, devuelve false (si se ha producido un error o si la operación ha expirado).

[override virtual] bool QSerialPort::waitForReadyRead(int msecs = 30000)

Reimplementa: QIODevice::waitForReadyRead(int msecs).

Esta función se bloquea hasta que hay nuevos datos disponibles para lectura y se ha emitido la señal readyRead(). La función expirará después de msecs milisegundos; el tiempo de espera por defecto es de 30000 milisegundos. Si msecs es -1, esta función no expirará.

La función devuelve true si se emite la señal readyRead() y hay nuevos datos disponibles para leer; en caso contrario, devuelve false (si se ha producido un error o la operación ha expirado).

Véase también waitForBytesWritten().

[since 6.10] qint64 QSerialPort::writeBufferSize() const

Devuelve el tamaño del búfer interno de escritura.

Un tamaño de búfer de escritura de 0 (por defecto) significa que el búfer no tiene límite de tamaño.

Esta función se introdujo en Qt 6.10.

Véase también setWriteBufferSize() y write().

[override virtual protected] qint64 QSerialPort::writeData(const char *data, qint64 maxSize)

Reimplementa: QIODevice::writeData(const char *data, qint64 maxSize).

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.