欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)激活碼778899分享:開發(fā)語言 c++ QT串口收發(fā)

柚子快報(bào)激活碼778899分享:開發(fā)語言 c++ QT串口收發(fā)

http://yzkb.51969.com/

QT串口收發(fā)

串口掃描配置串口信息設(shè)置串口名稱設(shè)置波特率設(shè)置數(shù)據(jù)位設(shè)置奇偶校驗(yàn)設(shè)置停止位設(shè)置流控制設(shè)置讀取數(shù)據(jù)的緩存大小打開串口串口打開并配置代碼

串口接收數(shù)據(jù)串口發(fā)送數(shù)據(jù)串口關(guān)閉offAndOn自定義函數(shù),使comboBox不可再選

源碼:

串口掃描

將串口模塊添加到工程中 在.pro文件中添加serialport 用到的頭文件:

#include

#include

QSerialPort類提供訪問串口的功能,還可以通過QSerialPortInfo類獲取可用串口的信息。 QSerialPortInfo類允許枚舉系統(tǒng)中所有串口的信息,包括串口名稱、系統(tǒng)位置、描述和制造商。 QSerialPortInfo::availablePorts();返回系統(tǒng)上可用串口的列表。

foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())

{

//這里只是臨時(shí)讀取可用串口不要在堆區(qū)直接開辟空間

QSerialPort port;

port.setPort(info);

//以可讀可寫的方式打開(臨時(shí)打開,掃描可用串口)

if(port.open(QIODevice::ReadWrite))

{

//將掃描到的可用串口寫入到comboBox里

ui->comboBox->addItem(port.portName());

//關(guān)閉串口

port.close();

}

}

foreach(variable, container)”可以看到,foreach有兩個(gè)參數(shù):

container:容器,即被遍歷的對象

variable:當(dāng)前元素,即遍歷container過程中,當(dāng)前的那個(gè)元素

聲明QSerialPort成員變量 定義指針變量,用來承接在堆區(qū)開辟的對象,使之在全局范圍內(nèi)可用 在主窗口中實(shí)例化串口對象,和對可用串口進(jìn)行掃描

配置串口信息

通過QSerialPort類型定義的串口對象 對串口參數(shù)設(shè)置 配置信息主要是在串口打開時(shí)設(shè)置的,所以我們可以設(shè)置在串口打開按鈕槽函數(shù)里面

設(shè)置串口名稱

void QSerialPort::setPortName(const QString &name)

//ui->comboBox->currentText()//是comboBox當(dāng)前的文本內(nèi)容

m_port->setPortName(ui->comboBox->currentText());

設(shè)置波特率

setBaudRate(qint32 baudRate, Directions directions = AllDirections)

baudRate:為int類型 的波特率

m_port->setBaudRate(ui->comboBox_2->currentText().toInt());

//ui->comboBox_2->currentText().toInt()//將comboBox_2當(dāng)前文本內(nèi)容轉(zhuǎn)換為int

設(shè)置數(shù)據(jù)位

setDataBits(DataBits dataBits)

DataBits的類型為:

//comboBox_4數(shù)據(jù)位comboBox

//設(shè)置數(shù)據(jù)位

switch (ui->comboBox_4->currentText().toInt())

{

case 8:

m_port->setDataBits(QSerialPort::Data8);

break;

case 7:

m_port->setDataBits(QSerialPort::Data7);

break;

case 6:

m_port->setDataBits(QSerialPort::Data6);

break;

case 5:

m_port->setDataBits(QSerialPort::Data5);

break;

}

設(shè)置奇偶校驗(yàn)

在串口通信中一種簡單的檢錯(cuò)方式。有四種檢錯(cuò)方式:偶、奇、高和低。當(dāng)然沒有校驗(yàn)位也是可以的。

bool setParity(Parity parity)

if(ui->comboBox_5->currentText() == tr("無"))

m_port->setParity(QSerialPort::NoParity);

else if(ui->comboBox_5->currentText() == tr("奇校驗(yàn)"))

m_port->setParity(QSerialPort::EvenParity);

else if(ui->comboBox_5->currentText() == tr("偶校驗(yàn)"))

m_port->setParity(QSerialPort::OddParity);

else if(ui->comboBox_5->currentText() == tr("空格"))

m_port->setParity(QSerialPort::SpaceParity);

else if(ui->comboBox_5->currentText() == tr("標(biāo)記"))

m_port->setParity(QSerialPort::MarkParity);

設(shè)置停止位

bool setStopBits(StopBits stopBits)

if(ui->comboBox_3->currentText() == tr("1"))

m_port->setStopBits(QSerialPort::OneStop);

else if(ui->comboBox_3->currentText() == tr("1.5"))

m_port->setStopBits(QSerialPort::OneAndHalfStop);

else if(ui->comboBox_3->currentText() == tr("2"))

m_port->setStopBits(QSerialPort::TwoStop);

設(shè)置流控制

bool setFlowControl(FlowControl flowControl)

m_port->setFlowControl(QSerialPort::NoFlowControl); //設(shè)置為無流控制

設(shè)置讀取數(shù)據(jù)的緩存大小

它的大小決定了串口收到數(shù)據(jù)后可以緩存的數(shù)據(jù)的大小,如果長時(shí)間不將數(shù)據(jù)從緩沖區(qū)取出來,會(huì)出現(xiàn)溢出丟數(shù)據(jù)的情況。所以這個(gè)緩存的大小可以根據(jù)實(shí)際的通信速度和數(shù)據(jù)量進(jìn)行設(shè)置。

m_port->setReadBufferSize(40960);

打開串口

ReadWrite//可讀可寫

m_serialPort->open(QIODevice);

參數(shù)可以設(shè)置串口為只讀、只寫、讀寫三種方式。

串口打開并配置代碼

這一過程我主要在串口打開按鈕槽函數(shù)完成的

m_port->setBaudRate(ui->comboBox_2->currentText().toInt());//設(shè)置波特率

m_port->setPortName(ui->comboBox->currentText());

if(m_port->open(QIODevice::ReadWrite))

{

//設(shè)置數(shù)據(jù)位

switch (ui->comboBox_4->currentText().toInt())

{

case 8:

m_port->setDataBits(QSerialPort::Data8);

break;

case 7:

m_port->setDataBits(QSerialPort::Data7);

break;

case 6:

m_port->setDataBits(QSerialPort::Data6);

break;

case 5:

m_port->setDataBits(QSerialPort::Data5);

break;

}

//設(shè)置停止位

if(ui->comboBox_3->currentText() == tr("1"))

m_port->setStopBits(QSerialPort::OneStop);

else if(ui->comboBox_3->currentText() == tr("1.5"))

m_port->setStopBits(QSerialPort::OneAndHalfStop);

else if(ui->comboBox_3->currentText() == tr("2"))

m_port->setStopBits(QSerialPort::TwoStop);

//設(shè)置校驗(yàn)位

if(ui->comboBox_5->currentText() == tr("無"))

m_port->setParity(QSerialPort::NoParity);

else if(ui->comboBox_5->currentText() == tr("奇校驗(yàn)"))

m_port->setParity(QSerialPort::EvenParity);

else if(ui->comboBox_5->currentText() == tr("偶校驗(yàn)"))

m_port->setParity(QSerialPort::OddParity);

else if(ui->comboBox_5->currentText() == tr("空格"))

m_port->setParity(QSerialPort::SpaceParity);

else if(ui->comboBox_5->currentText() == tr("標(biāo)記"))

m_port->setParity(QSerialPort::MarkParity);

offAndOn(false);

m_port->setFlowControl(QSerialPort::NoFlowControl); //設(shè)置為無流控制

m_port->setReadBufferSize(40960);

}

else {

qDebug() << "串口打開失敗";

}

串口接收數(shù)據(jù)

串口接收數(shù)據(jù) 是通過信號readyRead信號,接收串口數(shù)據(jù)

信號:readyRead信號

//設(shè)置串口監(jiān)聽

connect(m_port,SIGNAL(readyRead()),this,SLOT(ReadData()));

//ReadData() //該槽函數(shù)需要用戶自己完成

設(shè)置接收監(jiān)聽 checkBox為: textEdit為

void Widget::ReadData()

{

//關(guān)閉串口

QByteArray arr;

//判斷串口接收方式

if(ui->checkBox->checkState())

{

arr = m_port->readAll().toHex();//將數(shù)據(jù)轉(zhuǎn)換成16進(jìn)制

}

else

{

arr = m_port->readAll();

}

ui->textEdit->append(arr);//將數(shù)據(jù)打印到textEdit

}

串口發(fā)送數(shù)據(jù)

textEdit_2為: checkBox_2為: checkBox_3為:

QByteArray Data_1;

//獲取輸入窗口sendData的數(shù)據(jù)

QString Data = ui->textEdit_2->toPlainText();

if(ui->checkBox_3->checkState())

{

Data+='\r';Data+='\n';

}

if(ui->checkBox_2->checkState())

{

Data_1 = QByteArray::fromHex(Data.toLatin1().data());//按十六進(jìn)制編碼發(fā)送

}

else

{

Data_1 = Data.toUtf8();//轉(zhuǎn)換成utf8格式的字節(jié)流發(fā)送

}

// 寫入發(fā)送緩存區(qū)

m_port->write(Data_1);

串口關(guān)閉

關(guān)閉應(yīng)寫在關(guān)閉槽函數(shù)中

m_port->close();

offAndOn(true);//自定義函數(shù),

offAndOn自定義函數(shù),使comboBox不可再選

void Widget::offAndOn(bool status)

{

ui->comboBox->setEnabled(status);

ui->comboBox_2->setEnabled(status);

ui->comboBox_3->setEnabled(status);

ui->comboBox_4 ->setEnabled(status);

ui->comboBox_5 ->setEnabled(status);

}

status false不可選 true可選

ui->comboBox->clear(); //清空comboBox

源碼:

鏈接:https://pan.baidu.com/s/1zgz6evCmnVrMW0CzBcjkYQ?pwd=2178 提取碼:2178

柚子快報(bào)激活碼778899分享:開發(fā)語言 c++ QT串口收發(fā)

http://yzkb.51969.com/

相關(guān)鏈接

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18405444.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄