#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 初始化串口配置 ----- 主线程
serial_1 = new QSerialPort();
SerialPortConfigInit();
// -------------- end 主线程
// confSeriaPort = new configRWserialport();
// 串口配置界面
uiserialport = new uiSerialPort();
#if 1
// 线程 Begin -------------
confSeriaPort = new configRWserialport();
threadserialport = new QThread;
confSeriaPort->moveToThread(threadserialport);
// 回收 串口数据处理类
connect(threadserialport, &QThread::finished, confSeriaPort, &configRWserialport::deleteLater);
// 回收 子线程变量
connect(threadserialport, &QThread::finished, threadserialport, &QThread::deleteLater);
// 通知串口配置初始化
connect(threadserialport, &QThread::started, confSeriaPort, &configRWserialport::slot_serialporInit);
// 启动线程
threadserialport->start();
// 点击打开串口 触发 线程 设置线程波特率、串口名... 打开串口
connect(uiserialport, &uiSerialPort::signal_setConfigSerialPort,
confSeriaPort, &configRWserialport::slot_configSrialport);
// 关闭串口
connect(uiserialport, &uiSerialPort::signal_closeOpen,
confSeriaPort, &configRWserialport::slot_closeOpneSrialport);
connect(confSeriaPort, &configRWserialport::signal_serialStatus,
uiserialport, &uiSerialPort::slots_openOrNot);
// ---------------- end 线程
#endif
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_btn_openConsole_clicked()
{
if (ui->btn_openConsole->text() == tr("打开串口"))
{
//设置串口名字
serial_1->setPortName(ui->comboBox_serialPort->currentText());
//设置波特率
serial_1->setBaudRate(ui->comboBox_baudRate->currentText().toInt());
//设置数据位
serial_1->setDataBits(QSerialPort::Data8);
//设置奇偶校验位
serial_1->setParity(QSerialPort::NoParity);
//设置停止位
serial_1->setStopBits(QSerialPort::OneStop);
//设置流控
serial_1->setFlowControl(QSerialPort::NoFlowControl);
//打开串口
if (serial_1->open(QIODevice::ReadWrite))
{
ui->comboBox_baudRate->setEnabled(false);
ui->comboBox_dataBits->setEnabled(false);
ui->comboBox_parity->setEnabled(false);
ui->comboBox_serialPort->setEnabled(false);
ui->comboBox_stopBit->setEnabled(false);
ui->btn_openConsole->setText(tr("关闭串口"));
//信号与槽函数关联
connect(serial_1, &QSerialPort::readyRead, this, &Widget::readData);
}
}
else
{
//关闭串口
serial_1->close();
serial_1->deleteLater();
//恢复设置功能
ui->comboBox_baudRate->setEnabled(true);
ui->comboBox_dataBits->setEnabled(true);
ui->comboBox_parity->setEnabled(true);
ui->comboBox_serialPort->setEnabled(true);
ui->comboBox_stopBit->setEnabled(true);
ui->btn_openConsole->setText(tr("打开串口"));
}
}
static const char blankString[] = QT_TRANSLATE_NOOP("SettingsDialog", "N/A");
void Widget::SerialPortConfigInit()
{
//获取可以用的串口
QList<QSerialPortInfo> serialPortInfos = QSerialPortInfo::availablePorts();
QString description;
QString manufacturer;
QString serialNumber;
//输出当前系统可以使用的串口个数
qDebug() << "Total numbers of ports: " << serialPortInfos.count();
//将所有可以使用的串口设备添加到ComboBox中
for (const QSerialPortInfo &serialPortInfo : serialPortInfos) {
QStringList list;
description = serialPortInfo.description();
manufacturer = serialPortInfo.manufacturer();
serialNumber = serialPortInfo.serialNumber();
list << serialPortInfo.portName()
<< (!description.isEmpty() ? description : blankString)
<< (!manufacturer.isEmpty() ? manufacturer : blankString)
<< (!serialNumber.isEmpty() ? serialNumber : blankString)
<< serialPortInfo.systemLocation()
<< (serialPortInfo.vendorIdentifier() ? QString::number(serialPortInfo.vendorIdentifier(), 16) : blankString)
<< (serialPortInfo.productIdentifier() ? QString::number(serialPortInfo.productIdentifier(), 16) : blankString);
ui->comboBox_serialPort->addItem(list.first(), list);
}
ui->comboBox_serialPort->addItem(tr("custom"));
//设置波特率
// ui->comboBox_baudRate->addItem(QStringLiteral("4800"), QSerialPort::Baud4800);
ui->comboBox_baudRate->addItem(QStringLiteral("9600"), QSerialPort::Baud9600);
ui->comboBox_baudRate->addItem(QStringLiteral("19200"), QSerialPort::Baud19200);
ui->comboBox_baudRate->addItem(QStringLiteral("38400"), QSerialPort::Baud38400);
ui->comboBox_baudRate->addItem(QStringLiteral("57600"), QSerialPort::Baud57600);
ui->comboBox_baudRate->addItem(QStringLiteral("115200"), QSerialPort::Baud115200);
ui->comboBox_baudRate->addItem(tr("Custom"));
//设置数据位
ui->comboBox_dataBits->addItem(QStringLiteral("5"), QSerialPort::Data5);
ui->comboBox_dataBits->addItem(QStringLiteral("6"), QSerialPort::Data6);
ui->comboBox_dataBits->addItem(QStringLiteral("7"), QSerialPort::Data7);
ui->comboBox_dataBits->addItem(QStringLiteral("8"), QSerialPort::Data8);
ui->comboBox_dataBits->setCurrentIndex(3);
//设置奇偶校验位
ui->comboBox_parity->addItem(tr("None"), QSerialPort::NoParity);
ui->comboBox_parity->addItem(tr("Even"), QSerialPort::EvenParity); // 偶
ui->comboBox_parity->addItem(tr("Odd"), QSerialPort::OddParity); // 奇
ui->comboBox_parity->addItem(tr("Mark"), QSerialPort::MarkParity);
ui->comboBox_parity->addItem(tr("Space"), QSerialPort::SpaceParity);
//设置停止位
ui->comboBox_stopBit->addItem(QStringLiteral("1"), QSerialPort::OneStop);
ui->comboBox_stopBit->addItem(QStringLiteral("2"), QSerialPort::TwoStop);
#if 0
//添加流控
ui->comboBox_flowBit->addItem(tr("None"), QSerialPort::NoFlowControl);
ui->comboBox_flowBit->addItem(tr("RTS/CTS"), QSerialPort::HardwareControl);
ui->comboBox_flowBit->addItem(tr("XON/XOFF"), QSerialPort::SoftwareControl);
#endif
}
void Widget::readData()
{
QByteArray buf = serial_1->readAll();
if (!buf.isEmpty()) {
char* rawBuf=buf.data();
qDebug() << rawBuf;
// qDebug()<<"read current value "<< *(uint16_t*)(rawBuf + 3);
}
return ;
}
void Widget::on_btnSend_clicked()
{
QByteArray msg;
msg = ui->Editmsg->toPlainText().toUtf8();
if(msg.isEmpty()) return ;
int ret=serial_1->write(msg);
}
void Widget::on_conserialport_clicked()
{
uiserialport->show();
}
没有合适的资源?快使用搜索试试~ 我知道了~
Qt串口QSerialPortd的多线程(moveTo + 信号 + 槽)和非线程版 源码
共432个文件
idx:399个
h:9个
cpp:8个
需积分: 0 10 下载量 147 浏览量
2023-12-15
14:29:40
上传
评论
收藏 3.42MB ZIP 举报
温馨提示
Qt串口QSerialPortd 使用多线程(moveTo + 信号 + 槽)和咋主线程中可以直接创建,可以定时发送等
资源推荐
资源详情
资源评论
收起资源包目录
Qt串口QSerialPortd的多线程(moveTo + 信号 + 槽)和非线程版 源码 (432个子文件)
widget.cpp 7KB
uiserialport.cpp 5KB
moc_configserialport.cpp 4KB
moc_widget.cpp 4KB
moc_ui_serialport.cpp 3KB
configrwserialport.cpp 2KB
main.cpp 175B
global.cpp 57B
Makefile.Debug 56KB
moc_predefs.h 15KB
ui_widget.h 5KB
ui_configserialport.h 4KB
ui_ui_serialport.h 3KB
widget.h 786B
configrwserialport.h 653B
uiserialport.h 631B
global.h 247B
head.h 190B
qhash.h.D73D198864662C61.idx 154KB
qnamespace.h.31BA90E2EFA6B38D.idx 146KB
qstring.h.121F72ECE3502793.idx 136KB
qmetatype.h.59948D8F710E4E6B.idx 135KB
qmap.h.06800A276BF46E13.idx 124KB
qvector.h.997B55E03E6B4A6C.idx 98KB
qlocale.h.8B897A9A7B4745CB.idx 83KB
qset.h.8E81E54AB07C5C4F.idx 76KB
qlist.h.E7350F51848AAF01.idx 74KB
qtypeinfo.h.DA4330FECF1A6ACA.idx 68KB
qdebug.h.7706B7C1D8D30595.idx 65KB
qsharedpointer_impl.h.A931CDBA7C3E3F0F.idx 64KB
qstyleoption.h.35CF7FED5931FCA6.idx 63KB
qtextformat.h.BD54E5BE91E511E3.idx 61KB
variant.F3C77538FB5339B6.idx 60KB
qstyle.h.5F7EC455295AA82A.idx 58KB
basic_string.h.F76A99348862E4B1.idx 57KB
limits.BCD53E9E17176EB0.idx 57KB
stl_tree.h.C08543BEEB1DAA07.idx 56KB
stl_algo.h.B4BB1909AB9F9210.idx 52KB
qvarlengtharray.h.417C14827FD9C3E2.idx 51KB
qcontiguouscache.h.0E516C6B0EB6F596.idx 48KB
shared_ptr_base.h.B614A7E98303A692.idx 48KB
type_traits.8845CC1B6F0C7C4D.idx 46KB
wchar.h.409CC1AC181ABA50.idx 45KB
qvariant.h.BD79A734674964ED.idx 45KB
qbytearray.h.8DCE7281DA25A9BB.idx 43KB
qobjectdefs.h.EB34592F1B8C3DE7.idx 43KB
qchar.h.F9DA5787099091E7.idx 43KB
future.DA80FE6943A91B22.idx 42KB
qcolor.h.F46BEE5620CE12EB.idx 42KB
qflags.h.6BD0753BC5434986.idx 41KB
qwidget.h.E41D17BDF0C773F1.idx 39KB
qrect.h.FAE989B92E827439.idx 38KB
functional.445E2FF4FD115975.idx 37KB
atomic.1ACBE24C197141AF.idx 36KB
stdlib.h.D25D7CE3DF737231.idx 34KB
vector.tcc.5D0915F61DC63AE1.idx 34KB
locale_facets.tcc.1B70CB54220F207C.idx 34KB
qurl.h.783292BE8781BE10.idx 33KB
stl_list.h.33D0E812A4D9E2BC.idx 32KB
basic_string.tcc.2B03480A503ECBD5.idx 32KB
qalgorithms.h.D0D6400B6C5284D7.idx 32KB
unordered_map.h.306C87F01DDAF72F.idx 31KB
stl_function.h.105FCA17E5805CA7.idx 31KB
qbrush.h.BF4CD53D255E28C7.idx 30KB
qglobal.h.65A0744E51BDD909.idx 30KB
unique_ptr.h.70D229B56167D8FB.idx 30KB
optional.B92D9726CD24905A.idx 28KB
stl_vector.h.C26563B42599757E.idx 28KB
qshareddata.h.8A87A21B91E19C65.idx 28KB
stl_bvector.h.F2CFFEFD2F577BAB.idx 27KB
chrono.BE67B8C2E3241ADA.idx 27KB
tuple.8A62BD80AB5B52B1.idx 26KB
locale_facets.h.AB8752C4429647A4.idx 26KB
shared_ptr.h.E16A9F53BFA7B4D8.idx 25KB
stl_map.h.57C80A72DC234C7C.idx 25KB
pthread.h.3F0721D7F8183425.idx 25KB
qabstractitemmodel.h.270DE259F8AE304E.idx 25KB
list.tcc.667157127DB0BC89.idx 25KB
stl_algobase.h.10DC1027E68B28F2.idx 25KB
hashtable.h.391A0CA5CD8E0893.idx 25KB
qdatastream.h.6A0D5C5FD79F85F8.idx 24KB
qobjectdefs_impl.h.D8F4210C9B034DF0.idx 23KB
shared_ptr_atomic.h.540CE8F6BE1201E8.idx 22KB
qobject.h.32648E9B819EB7BC.idx 21KB
ratio.E3710885F40F1D98.idx 21KB
qabstractitemview.h.27820B3639435872.idx 21KB
stl_iterator.h.F34922893DDCE490.idx 21KB
stdio.h.D7AC3C52C0F48676.idx 20KB
qimage.h.6AEBD2FD91A07544.idx 19KB
string_view.FC23B0912C2C4248.idx 19KB
qstringview.h.1C4DBE4EC5D870A5.idx 19KB
qpixelformat.h.A8C96EC4C67D4739.idx 18KB
qmargins.h.D60951026AF3E781.idx 18KB
qtextstream.h.A2ED77E842F8566C.idx 18KB
qcoreevent.h.28B2F4B4F2AA71BB.idx 18KB
string.h.3FEF7639965B2020.idx 18KB
qsize.h.4E121C47A9A7117E.idx 18KB
qfont.h.4F450EA9A7801944.idx 17KB
qtransform.h.CC111F9DF5682CC7.idx 17KB
qhashfunctions.h.6D59682E1C5FBD02.idx 17KB
共 432 条
- 1
- 2
- 3
- 4
- 5
资源评论
秃头王✾
- 粉丝: 18
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功