点击所需要设计的控件,在属性界面找到styleSheet,点击…即可进入快捷设计界面
QPushButton{background-color: rgb(170, 170, 255);color: white;border-radius: 10px; border: 2px groove gray;border-style: outset;
}
QT += serialport #加入串口模块
实现代码:
//搜索串口
void MainWindow::on_Serach_Button_clicked()
{// 清除当前显示的端口号ui->Serial_engine_comboBox->clear();//检索端口号foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){ui->Serial_engine_comboBox->addItem(info.portName());}
}
3.打开串口
//打开串口
void MainWindow::on_open_Button_clicked()
{if(ui->open_Button->text() == QString("OpenPort")) //串口未打开{//设置端口号Serial.setPortName(ui->Serial_engine_comboBox->currentText());//设置波特率Serial.setBaudRate(ui->Speed_comboBox->currentText().toInt());//设置数据位switch (ui->Data_bits_comboBox->currentText().toInt()){case 8: Serial.setDataBits(QSerialPort::Data8); break;case 7: Serial.setDataBits(QSerialPort::Data7); break;case 6: Serial.setDataBits(QSerialPort::Data6); break;case 5: Serial.setDataBits(QSerialPort::Data5); break;default: break;}//设置停止位switch (ui->Stop_bits_comboBox->currentText().toInt()){case 1: Serial.setStopBits(QSerialPort::OneStop);break;case 2: Serial.setStopBits(QSerialPort::TwoStop);break;case 3: Serial.setStopBits(QSerialPort::OneAndHalfStop);break;default:break;}//设置校验方式switch (ui->Parity_comboBox->currentIndex()){case 0: Serial.setParity(QSerialPort::NoParity);break;default:break;}//设置流控制模式Serial.setFlowControl(QSerialPort::NoFlowControl);//打开串口if(Serial.open(QIODevice::ReadWrite)==false){QMessageBox::warning(NULL , "提示", "串口打开失败!");return;}// 使能串口设置控件ui->Serial_engine_comboBox->setEnabled(false);ui->Speed_comboBox->setEnabled(false);ui->Data_bits_comboBox->setEnabled(false);ui->Stop_bits_comboBox->setEnabled(false);ui->Parity_comboBox->setEnabled(false);ui->Flow_control_comboBox->setEnabled(false);ui->Serach_Button->setEnabled(false);//调整串口控制按钮的文字提示ui->open_Button->setText(QString("ClosePort"));}else //串口已经打开{Serial.close();// 使能串口设置控件ui->Serial_engine_comboBox->setEnabled(true);ui->Speed_comboBox->setEnabled(true);ui->Data_bits_comboBox->setEnabled(true);ui->Stop_bits_comboBox->setEnabled(true);ui->Parity_comboBox->setEnabled(true);ui->Flow_control_comboBox->setEnabled(true);ui->Serach_Button->setEnabled(true);//调整串口控制按钮的文字提示ui->open_Button->setText(QString("OpenPort"));}
}
4.串口发送
//串口发送
void MainWindow::on_Send_Four_pushButton_clicked()
{if(Serial.isOpen()==false) //判断串口是否打开{QMessageBox::warning(NULL , "提示", "请打开串口!");return;}//toPlainText() 转换为纯文本格式//toUtf8() 转换为UTF-8 编码QByteArray senddata = ui->SendEdit_Four->toPlainText().toUtf8();//判断是否有非16进制字符if(ui->hex_radioButton_four->isChecked()==true) //勾选了16进制发送{int cnt = senddata.size(); //计算要发送数据的长度char *data = senddata.data();for(int i=0;i<cnt;i++)//判断是否有非16进制字符{if(data[i]>='0' && (data[i]<='9'))continue;else if(data[i]>='a' && (data[i]<='f'))continue;else if(data[i]>='A' && (data[i]<='F'))continue;else if(data[i] == ' ') //是否有空格continue;else{QMessageBox::warning(NULL , "提示", "输入非16进制字符!");return;}}senddata = senddata.fromHex(senddata);}//勾选了发送新行,意思是在发送数据之后加上一个回车换行符if(ui->New_checkBox_four->isChecked()==true){int cnt = senddata.size();senddata = senddata.insert(cnt,"rn"); }Serial.write(senddata); //通过串口发送数据
}
5.串口接收数据
这里需要把串口读取函数定义在private slots:里
private slots:void on_open_Button_clicked();void on_Serach_Button_clicked();void on_Send_Four_pushButton_clicked();void Serial_read();//串口读取void on_Clearn_Button_clicked();
void MainWindow::Serial_read()
{//读取串口收到的数据QByteArray buffer = adAll();//判断是否需要16进制显示if(ui->hex_radioButton_read->isChecked()==true){buffer = Hex() ;//转换为16进制 例:"1234" -->“31323334”}QString receive = QString(buffer);//在接收窗口显示收到的数据ui->Receive_Edit->insertPlainText(receive);
}
并设置它的一个槽函数:
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);this->setWindowIcon(QIcon("://images/myico.png")); //设置启动左上角图标ui->Speed_comboBox->setCurrentIndex(5); //波特率默认9600ui->Data_bits_comboBox->setCurrentIndex(3); //数据位默认8ui->Stop_bits_comboBox->setCurrentIndex(0); //停止位默认1ui->Parity_comboBox->setCurrentIndex(0); //校验位默认0ui->Flow_control_comboBox->setCurrentIndex(0); //流控制默认 NoFlowControl//连接槽函数connect(&Serial,&QSerialPort::readyRead,this,&MainWindow::Serial_read);
}
6.清屏
//清空接收窗口
void MainWindow::on_Clearn_Button_clicked()
{ui->Receive_Edit->clear();
}
7.其他一些小功能还没完善,比如说计算收到多少个字节,发送了多少个字节,清除接收发送的字节数,而发送这里也只实现了最下面的一个,其他三个没实现,读者可自行实现。
this->setWindowIcon(QIcon("://images/myico.png")); //设置启动左上角图标
IDI_ICON1 ICON DISCARDABLE "myico.ico"
RC_FILE +=
选择编译器
将构建好的可执行程序复制到桌面并创建一个空的文件夹放里面
打开Qt自带的终端
切换刚才复制的可执行程序所在的文件夹,并执行一下代码
cd /d C:UsersUnicornDesktopnew // /d:切换盘符所需要添加
//可执行程序的名字.exe
本文发布于:2024-02-02 10:12:18,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170683993843115.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |