范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Qt实现串口通信的完整步骤

  要实现串口通信,需要知道串口通信需要的信息
  主要参数有:波特率、校验位、数据位、停止位、控制流
  主要操作有:串口的打开和关闭、刷新设备串口、接发数据、开关显示灯等。实现效果如图:
  界面设计如下:
  每个控件类名如下:
  LED灯是QLable控件,设置它的长宽都是24px,然后鼠标右击,选择"样式表",在样式表中添加代码。
  文章最后附赠完整源码
  第一步:在头文件中引入 QtSerialPort 类的两个头文件(必须引入)// 引入串口通信的两个头文件(第一步) #include          // 提供访问串口的功能 #include      // 提供系统中存在的串口信息
  第二步:在工程文件中添加以下代码# 引入串口工程类型(第二步) QT       += serialport
  第三步:在头文件中定义全局的串口对象QSerialPort     *serial;                            // 定义全局的串口对象(第三步)
  第四步:参数设置,在头文件中定义初始化参数的函数和参数变量名,在.cpp文件中实现函数public: void        SerialPortInit();                      // 串口初始化(参数配置)   private: // 参数配置     QStringList     baudList;                           //波特率     QStringList     parityList;                         //校验位     QStringList     dataBitsList;                       //数据位     QStringList     stopBitsList;                       //停止位     QStringList     flowControlList;                    //控制流// 串口初始化(参数配置) void MainWindow::SerialPortInit() {     serial = new QSerialPort;                       //申请内存,并设置父对象       // 获取计算机中有效的端口号,然后将端口号的名称给端口选择控件     foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())     {         serial->setPort(info);                      // 在对象中设置串口         if(serial->open(QIODevice::ReadWrite))      // 以读写方式打开串口         {             ui->PortBox->addItem(info.portName());  // 添加计算机中的端口             serial->close();                        // 关闭         } else         {             qDebug() << "串口打开失败,请重试";         }     }       // 参数配置     // 波特率,波特率默认选择57600 ,禁止用户点击     ui->BaudBox->addItem("57600");     serial->setBaudRate(QSerialPort::Baud57600);     ui->BaudBox->setDisabled(true);       // 校验,校验默认选择无     ui->ParityBox->addItem("无");     serial->setParity(QSerialPort::NoParity);       // 数据位,数据位默认选择8位     ui->BitBox->addItem("8");     serial->setDataBits(QSerialPort::Data8);       // 停止位,停止位默认选择1位     ui->StopBox->addItem("1");     serial->setStopBits(QSerialPort::OneStop);       // 控制流,默认选择无     ui->ControlBox->addItem("无");     serial->setFlowControl(QSerialPort::NoFlowControl);       // 刷新串口     RefreshSerialPort(0);       // 信号 connect(serial,&QSerialPort::readyRead,this,&MainWindow::DataReceived);      // 接收数据 connect(ui->SendWordOrder,&QPushButton::clicked,this,&MainWindow::DataSend); // 发送数据 connect(ui->SendButton,&QPushButton::clicked,this,&MainWindow::DataSend);    // 发送数据 connect(ui->SendEditBtn1,&QPushButton::clicked,this,&MainWindow::DataSend);  // 发送数据 connect(ui->SendEditBtn2,&QPushButton::clicked,this,&MainWindow::DataSend);  // 发送数据 connect(ui->SendEditBtn3,&QPushButton::clicked,this,&MainWindow::DataSend);  // 发送数据 }
  第五步:刷新串口,及时更新可用的串口
  QT开发交流+赀料君羊:714620761// 刷新串口 void MainWindow::RefreshSerialPort(int index) {     QStringList portNameList;                                        // 存储所有串口名     if(index != 0)     {         serial->setPortName(ui->PortBox->currentText());             //设置串口号     }     else     {         ui->PortBox->clear();                                        //关闭串口号         ui->PortBox->addItem("刷新");                                //添加刷新         foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts()) //添加新串口         {             portNameList.append(info.portName());         }         ui->PortBox->addItems(portNameList);         ui->PortBox->setCurrentIndex(1);                             // 当前串口号为COM1         serial->setPortName(ui->PortBox->currentText());             //设置串口号    } }
  第六步:发送数据和接收数据// 接收数据,使用read () / readLine () / readAll () void MainWindow::DataReceived() {     char BUF[512] = {0};                                       // 存储转换类型后的数据     QByteArray data = serial->readAll();                      // 读取数据       if(!data.isEmpty())                                 // 接收到数据     {         QString str = ui->DataReceived->toPlainText();  // 返回纯文本         str += tr(data);                         // 数据是一行一行传送的,要保存所有数据         ui->DataReceived->clear();                      // 清空之前的数据         ui->DataReceived->append(str);                  // 将数据放入控件中         qDebug() << "str info: " << ui->DataReceived->toPlainText();            // 清除之前的数据,防止追加,因为每次获取的数据不一样         int index = str.indexOf("r ");                // 找到,返回索引值,找不到,返回-1         if(index != -1)         {             snprintf(BUF,500,"%s", str.left(index + 2).toUtf8().data()); // QString转为char * 类型             qDebug() << "BUF info: " << BUF;        // 数据类型转换成功             str.remove(0,index + 2);                // 处理获取到的数据,将其放入对应的控件中             // .....                                       }     } }   // 发送数据,write () void MainWindow::DataSend() {     serial->write(ui->DataSend->toPlainText().toLatin1());      // 串口发送数据 }
  第七步:打开串口和关闭串口,当打开串口后,显示绿灯;关闭串口后,显示红灯// 串口开关 void color:rgb(98 189 255)">MainWindow::on_OpenSerialButton_clicked() {     if(serial->isOpen())                                  // 如果串口打开了,先给他关闭     {         serial->clear();         serial->close();         // 关闭状态,按钮显示"打开串口"         ui->OpenSerialButton->setText("打开串口");         // 关闭状态,允许用户操作         ui->BaudBox->setDisabled(false);         ui->ParityBox->setDisabled(false);         ui->BitBox->setDisabled(false);         ui->StopBox->setDisabled(false);         ui->ControlBox->setDisabled(false);         // 禁止操作"发送字符操作"         ui->SendWordOrder->setDisabled(true);         ui->SendButton->setDisabled(true);         // 关闭状态,颜色为绿色         ui->OpenSerialButton->setStyleSheet("color: green;");         // 关闭,显示灯为红色         LED(true);         // 清空数据         ui->DataReceived->clear();         ui->DataSend->clear();     }     else                                             // 如果串口关闭了,先给他打开     {         //当前选择的串口名字         serial->setPortName(ui->PortBox->currentText());         //用ReadWrite 的模式尝试打开串口,无法收发数据时,发出警告         if(!serial->open(QIODevice::ReadWrite))         {             QMessageBox::warning(this,tr("提示"),tr("串口打开失败!"),QMessageBox::Ok);             return;          }         // 打开状态,按钮显示"关闭串口"         ui->OpenSerialButton->setText("关闭串口");         // 打开状态,禁止用户操作         ui->BaudBox->setDisabled(true);         ui->ParityBox->setDisabled(true);         ui->BitBox->setDisabled(true);         ui->StopBox->setDisabled(true);         ui->ControlBox->setDisabled(true);         // 允许操作"发送字符操作"         ui->SendWordOrder->setDisabled(false);         ui->SendButton->setDisabled(false);         // 打开状态,颜色为红色         ui->OpenSerialButton->setStyleSheet("color: red;");         // 打开,显示灯为绿色         LED(false);     } }   // 开关显示灯 void  color:rgb(98 189 255)">MainWindow::LED(bool changeColor) {     if(changeColor == false)     {         // 显示绿色         ui->LED->setStyleSheet("background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(0, 229, 0, 255), stop:1 rgba(255, 255, 255, 255));border-radius:12px;");     }     else     {         // 显示红色         ui->LED->setStyleSheet("background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(255, 0, 0, 255), stop:1 rgba(255, 255, 255, 255));border-radius:12px;");     } }
  第八步:相关槽函数// 控件中添加 指令"###" void MainWindow::on_SendButton_clicked() {     on_ClearButton_clicked();     ui->DataSend->append("###"); } // 清空控件 void MainWindow::on_ClearButton_clicked() {     ui->DataSend->setText(""); } // 清空接收到的数据 void MainWindow::on_ClearShowButton_clicked() {     ui->DataReceived->setText(""); } // 点击发送后,获取串口信息并展示在接受控件中 void MainWindow::on_SendEditBtn1_clicked() {     on_ClearButton_clicked();     QString EditText = ui->Edit1->text();               //获取发送框内容     ui->DataSend->setText(EditText);                     //将文本内容放在发送栏中 }   void MainWindow::on_SendEditBtn2_clicked() {     on_ClearButton_clicked();     QString EditText = ui->Edit2->text();               //获取发送框内容       // qDebug() << "Edit1 text: " << EditText;       ui->DataSend->append(EditText);                     //将文本内容放在发送栏中 }   void MainWindow::on_SendEditBtn3_clicked() {     on_ClearButton_clicked();     QString EditText = ui->Edit3->text();               //获取发送框内容       // qDebug() << "Edit1 text: " << EditText;       ui->DataSend->append(EditText);                     //将文本内容放在发送栏中 }       void MainWindow::on_SendWordOrder_clicked() {     on_SendButton_clicked(); }源码:
  工程文件.pro文件源码:QT       += core gui # 引入串口工程类型(第二步) QT       += serialport   greaterThan(QT_MAJOR_VERSION, 4): QT += widgets   CONFIG += c++11   # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS   # You can also make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0   SOURCES +=      main.cpp      mainwindow.cpp   HEADERS +=      mainwindow.h   FORMS +=      mainwindow.ui   # Default rules for deployment. qnx: target.path = /tmp/${TARGET}/bin else: unix:!android: target.path = /opt/${TARGET}/bin !isEmpty(target.path): INSTALLS += target
  头文件源码:#ifndef MAINWINDOW_H #define MAINWINDOW_H   #include  // 引入串口通信的两个头文件(第一步) #include          // 提供访问串口的功能 #include      // 提供系统中存在的串口信息   QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE   class MainWindow : public QMainWindow {     Q_OBJECT   public:     MainWindow(QWidget *parent = nullptr);     ~MainWindow();       // 串口功能     void        SerialPortInit();                      // 串口初始化(参数配置)     void        RefreshSerialPort(int index);          // 刷新串口   public slots:     // 串口槽函数     void        DataReceived();                        // 接收数据 private slots:     // 串口槽函数     void        DataSend();                            // 发送数据       void        on_OpenSerialButton_clicked();         // 串口开关       void        on_SendButton_clicked();               // 控件中添加 #       void        on_ClearButton_clicked();              // 清空控件中的所有 #       void        on_ClearShowButton_clicked();          // 清空接收到的数据       void        LED(bool changeColor);                 // 开关显示灯       // 点击发送,接收数据     void        on_SendEditBtn1_clicked();       void        on_SendEditBtn2_clicked();       void        on_SendEditBtn3_clicked();         void on_SendWordOrder_clicked();   private:     Ui::MainWindow *ui;       // 串口变量     QSerialPort     *serial;                            // 定义全局的串口对象(第三步)     // 参数配置     QStringList     baudList;                           //波特率     QStringList     parityList;                         //校验位     QStringList     dataBitsList;                       //数据位     QStringList     stopBitsList;                       //停止位     QStringList     flowControlList;                    //控制流 }; #endif // MAINWINDOW_H
  .cpp文件源码:#include "color:rgb(98 189 255)">mainwindow.h" #include "ui_color:rgb(98 189 255)">mainwindow.h" #include  #include    color:rgb(98 189 255)">MainWindow::color:rgb(98 189 255)">MainWindow(QWidget *parent)     : Qcolor:rgb(98 189 255)">MainWindow(parent)     , ui(new color:rgb(144 255 173)">Ui::color:rgb(98 189 255)">MainWindow) {     ui->setupcolor:rgb(144 255 173)">Ui(this);       SerialPortInit(); }   // 串口初始化(参数配置) void color:rgb(98 189 255)">MainWindow::SerialPortInit() {     serial = new color:rgb(98 189 255)">QSerialPort;                       //申请内存,并设置父对象       // 获取计算机中有效的端口号,然后将端口号的名称给端口选择控件     foreach(const color:rgb(98 189 255)">color:rgb(98 189 255)">QSerialPortInfo &color:rgb(73 238 255)">info,color:rgb(98 189 255)">color:rgb(98 189 255)">QSerialPortInfo::availablePorts())     {         serial->setPort(color:rgb(73 238 255)">info);                      // 在对象中设置串口         if(serial->open(color:rgb(98 189 255)">QIODevice::ReadWrite))      // 以读写方式打开串口         {             ui->PortBox->addItem(color:rgb(73 238 255)">info.portName());  // 添加计算机中的端口             serial->close();                        // 关闭         } else         {             qDebug() << "串口打开失败,请重试";         }     }       // 参数配置     // 波特率,波特率默认选择color:rgb(255 95 0)">57600 ,禁止用户点击     ui->BaudBox->addItem("color:rgb(255 95 0)">57600");     serial->setBaudRate(color:rgb(98 189 255)">QSerialPort::Baudcolor:rgb(255 95 0)">57600);     ui->BaudBox->setDisabled(true);       // 校验,校验默认选择无     ui->ParityBox->addItem("无");     serial->setParity(color:rgb(98 189 255)">QSerialPort::NoParity);       // 数据位,数据位默认选择8位     ui->BitBox->addItem("8");     serial->setDataBits(color:rgb(98 189 255)">QSerialPort::Data8);       // 停止位,停止位默认选择1位     ui->StopBox->addItem("1");     serial->setStopBits(color:rgb(98 189 255)">QSerialPort::OneStop);       // 控制流,默认选择无     ui->ControlBox->addItem("无");     serial->setFlowControl(color:rgb(98 189 255)">QSerialPort::NoFlowControl);       // 刷新串口     RefreshSerialPort(0);       // 信号     connect(serial,&color:rgb(98 189 255)">QSerialPort::readyRead,this,&color:rgb(98 189 255)">MainWindow::DataReceived);         // 接收数据     connect(ui->SendWordOrder,&color:rgb(98 189 255)">QPushButton::clicked,this,&color:rgb(98 189 255)">MainWindow::DataSend);    // 发送数据     connect(ui->SendButton,&color:rgb(98 189 255)">QPushButton::clicked,this,&color:rgb(98 189 255)">MainWindow::DataSend);       // 发送数据     connect(ui->SendEditBtn1,&color:rgb(98 189 255)">QPushButton::clicked,this,&color:rgb(98 189 255)">MainWindow::DataSend);    // 发送数据     connect(ui->SendEditBtn2,&color:rgb(98 189 255)">QPushButton::clicked,this,&color:rgb(98 189 255)">MainWindow::DataSend);    // 发送数据     connect(ui->SendEditBtn3,&color:rgb(98 189 255)">QPushButton::clicked,this,&color:rgb(98 189 255)">MainWindow::DataSend);    // 发送数据   } // 刷新串口 void color:rgb(98 189 255)">MainWindow::RefreshSerialPort(int index) {     QStringList color:rgb(98 189 255)">portNameList;                                        // 存储所有串口名     if(index != 0)     {         serial->setPortName(ui->PortBox->currentText());             //设置串口号     }     else     {         ui->PortBox->clear();                                        //关闭串口号         ui->PortBox->addItem("刷新");                                //添加刷新         foreach(const color:rgb(98 189 255)">color:rgb(98 189 255)">QSerialPortInfo &color:rgb(73 238 255)">info,color:rgb(98 189 255)">color:rgb(98 189 255)">QSerialPortInfo::availablePorts()) //添加新串口         {             color:rgb(98 189 255)">portNameList.append(color:rgb(73 238 255)">info.portName());         }                 ui->PortBox->addItems(color:rgb(98 189 255)">portNameList);         ui->PortBox->setCurrentIndex(1);                             // 当前串口号为COM1         serial->setPortName(ui->PortBox->currentText());             //设置串口号    } }   // 接收数据,使用read () / readLine () / readAll () void color:rgb(98 189 255)">MainWindow::DataReceived() {     char BUF[512] = {0};                                       // 存储转换类型后的数据     QByteArray color:rgb(73 238 255)">data = serial->readAll();                      // 读取数据       if(!color:rgb(73 238 255)">data.isEmpty())                                 // 接收到数据     {         QString color:rgb(255 111 119)">str = ui->DataReceived->toPlainText();  // 返回纯文本         color:rgb(255 111 119)">str += tr(color:rgb(73 238 255)">data);                                // 数据是一行一行传送的,要保存所有数据         ui->DataReceived->clear();                      // 清空之前的数据         ui->DataReceived->append(color:rgb(255 111 119)">str);                  // 将数据放入控件中         qDebug() << "color:rgb(255 111 119)">str color:rgb(73 238 255)">info: " << ui->DataReceived->toPlainText();            // 清除之前的数据,防止追加,因为每次获取的数据不一样         int index = color:rgb(255 111 119)">str.indexOf("r ");                // 找到,返回索引值,找不到,返回-1         if(index != -1)         {             snprintf(BUF,500,"%s", color:rgb(255 111 119)">str.left(index + 2).toUtf8().color:rgb(73 238 255)">data()); // QString转为char * 类型             qDebug() << "BUF color:rgb(73 238 255)">info: " << BUF;             color:rgb(255 111 119)">str.remove(0,index + 2);               // 处理获取到的数据,将其放入对应的控件中             // ....         }     } } // 发送数据,write () void color:rgb(98 189 255)">MainWindow::DataSend() {     serial->write(ui->DataSend->toPlainText().toLatin1());      // 串口发送数据 }   // 开关显示灯 void  color:rgb(98 189 255)">MainWindow::LED(bool changeColor) {     if(changeColor == false)     {         // 显示绿色         ui->LED->setStyleSheet("color:rgb(98 189 255)">background-color: qradialgradient(color:rgb(255 211 0)">spread:pad, color:rgb(144 255 173)">cx:0.5, color:rgb(144 255 173)">cy:0.5, color:rgb(255 211 0)">radius:0.5, color:rgb(144 255 173)">fx:0.5, color:rgb(144 255 173)">fy:0.5, color:rgb(73 238 255)">stop:0 rgba(0, 229, 0, 255), color:rgb(73 238 255)">stop:1 rgba(255, 255, 255, 255));border-color:rgb(255 211 0)">radius:12px;");     }     else     {         // 显示红色         ui->LED->setStyleSheet("color:rgb(98 189 255)">background-color: qradialgradient(color:rgb(255 211 0)">spread:pad, color:rgb(144 255 173)">cx:0.5, color:rgb(144 255 173)">cy:0.5, color:rgb(255 211 0)">radius:0.5, color:rgb(144 255 173)">fx:0.5, color:rgb(144 255 173)">fy:0.5, color:rgb(73 238 255)">stop:0 rgba(255, 0, 0, 255), color:rgb(73 238 255)">stop:1 rgba(255, 255, 255, 255));border-color:rgb(255 211 0)">radius:12px;");     } }   color:rgb(98 189 255)">MainWindow::~color:rgb(98 189 255)">MainWindow() {     delete ui; }   // 串口开关 void color:rgb(98 189 255)">MainWindow::on_OpenSerialButton_clicked() {     if(serial->isOpen())                                        // 如果串口打开了,先给他关闭     {         serial->clear();         serial->close();         // 关闭状态,按钮显示"打开串口"         ui->OpenSerialButton->setText("打开串口");         // 关闭状态,允许用户操作         ui->BaudBox->setDisabled(false);         ui->ParityBox->setDisabled(false);         ui->BitBox->setDisabled(false);         ui->StopBox->setDisabled(false);         ui->ControlBox->setDisabled(false);         // 禁止操作"发送字符操作"         ui->SendWordOrder->setDisabled(true);         ui->SendButton->setDisabled(true);         // 关闭状态,颜色为绿色         ui->OpenSerialButton->setStyleSheet("color: green;");         // 关闭,显示灯为红色         LED(true);         // 清空数据         ui->DataReceived->clear();         ui->DataSend->clear();     }     else                                                        // 如果串口关闭了,先给他打开     {         //当前选择的串口名字         serial->setPortName(ui->PortBox->currentText());         //用ReadWrite 的模式尝试打开串口,无法收发数据时,发出警告         if(!serial->open(color:rgb(98 189 255)">QIODevice::ReadWrite))         {             QMessageBox::warning(this,tr("提示"),tr("串口打开失败!"),QMessageBox::Ok);             return;          }         // 打开状态,按钮显示"关闭串口"         ui->OpenSerialButton->setText("关闭串口");         // 打开状态,禁止用户操作         ui->BaudBox->setDisabled(true);         ui->ParityBox->setDisabled(true);         ui->BitBox->setDisabled(true);         ui->StopBox->setDisabled(true);         ui->ControlBox->setDisabled(true);         // 允许操作"发送字符操作"         ui->SendWordOrder->setDisabled(false);         ui->SendButton->setDisabled(false);         // 打开状态,颜色为红色         ui->OpenSerialButton->setStyleSheet("color: red;");         // 打开,显示灯为绿色         LED(false);     } } // 控件中添加 # void color:rgb(98 189 255)">MainWindow::on_SendButton_clicked() {     on_ClearButton_clicked();     ui->DataSend->append("###"); } // 清空控件 void color:rgb(98 189 255)">MainWindow::on_ClearButton_clicked() {     ui->DataSend->setText(""); } // 清空接收到的数据 void color:rgb(98 189 255)">MainWindow::on_ClearShowButton_clicked() {     ui->DataReceived->setText(""); } // 点击发送后,获取串口信息并展示在接受控件中 void color:rgb(98 189 255)">MainWindow::on_SendEditBtn1_clicked() {     on_ClearButton_clicked();     QString EditText = ui->Edit1->text();               //获取发送框内容     ui->DataSend->setText(EditText);                     //将文本内容放在发送栏中 }   void color:rgb(98 189 255)">MainWindow::on_SendEditBtn2_clicked() {     on_ClearButton_clicked();     QString EditText = ui->Edit2->text();               //获取发送框内容       // qDebug() << "Edit1 text: " << EditText;       ui->DataSend->append(EditText);                     //将文本内容放在发送栏中 }   void color:rgb(98 189 255)">MainWindow::on_SendEditBtn3_clicked() {     on_ClearButton_clicked();     QString EditText = ui->Edit3->text();               //获取发送框内容       // qDebug() << "Edit1 text: " << EditText;       ui->DataSend->append(EditText);                     //将文本内容放在发送栏中 }     void color:rgb(98 189 255)">MainWindow::on_SendWordOrder_clicked() {     on_SendButton_clicked(); }
  运行后效果:

只要看了就立刻让你上瘾的电视剧有哪些?我发现老剧是最让人意犹未尽的,比如这4部剧,第一,情深深雨濛濛以家庭狗血剧来说,这部剧可以算一个标杆了,混乱程度特别对观众胃口,以看热闹吃瓜心态来说,大家最喜欢的莫过于看东家长西家铁甲小宝特摄中的颜值小姐姐,小时候的你是不是光看铁疙瘩了?铁甲小宝特摄中的颜值小姐姐,小时候的你是不是光看铁疙瘩了?原本是要给大家盘点奥特曼系列中,平成时代的女主演,然而有朋友希望能看一下铁甲小宝,所以我们今天临时就先讲一讲这部作品,只不少年歌行真人版热播超越动漫,89岁游本昌本色出演登场泪目这几日,一部经由小说动漫改编而来的电视剧少年歌行正在热播。本剧一改过去慢动作局部特写的传统套路,武术设计行云流水,动作招式恰到好处,给观众呈现出一部酣畅淋漓的武侠剧。本剧最大的亮点玉见vivoS16Pro想不到美颜手机还能这样玩作为vivo主打自拍美颜的S系列,保持着一年两更的节奏。这次依旧也是稳定发挥,在2022年末,S系列推出了新一代的旗舰S16系列。这次的S16系列,除了前置补光灯的回归,在颜值性能AppleWatchSE有新年优惠,对比之下OPPOWatch3Pro更值很多人都会想要在新年入手数码产品,而厂商们也是十分迎合消费者的需求。比如苹果就给出了跨年福利,其中iPhone13iPhone13miniiPadminiiPadAir立减RMB2他靠亮剑走红,二婚娶小14岁女演员,后买车买房补偿前妻!现在的人有关婚姻的观念也越来越开放,以前的人觉得结婚之后就要相守一辈子,哪怕彼此过得非常不开心,也须要把婚姻维持下去,所以很多人在婚姻里受尽折磨,仍然不愿意离婚,这与大家的观念关于女排美女大将张常宁参加跨年晚会为什么会被网友排队骂呢2022年各省电视台跨年晚会直播或者录制现场又要开始了,作为中国女排现役颜值最高的球员,张常宁做客某省跨年晚会,官方海报发出来,底下的评论出奇的整齐,都是骂张常宁的,有球迷说球是不过度整容的几位明星,面部僵硬表情怪异,因动脸毁了自己的事业现在很多女生在追求美的时候,做法很极端,对于美的想法太过热烈,若达不到自己想要的目标,绝不会善罢甘休。随着医美技术的成熟,给很多爱美女性提供了变美的机会,很多人选择整容来提升自己的参与汇源重整的国中水务连涨4板!但果汁大王前路仍待观望12月29日开盘后,国中水务(600187。SH)股价收获了连续第四个涨停板,这一股价表现也与国中水务参与汇源果汁重整有关。12月26日晚,国中水务公告称,拟以8。5亿元的价格,间宁波海曙区加快建设翠柏里创新街区宁波海曙甬水桥科创中心。张昊桦摄引进落户96家科创企业,自主孵化54家科技型企业,吸引集聚800余名高层次人才今年以来,浙江宁波市海曙区翠柏里创新街区创业创新活力奔涌。作为宁波市首顺利通过验收!OPPO全球算力中心即将投入运营在交椅湾板块,企业厂房次第生长。位于振海路与滨海湾大道交界的一栋栋蓝白相间的建筑格外引人注目,这里是OPPO全球算力中心项目。12月27日,OPPO全球算力中心剩余建筑群完成竣工验
AIforScience年度激辩AlphaFold成功难以复制明敏丰色整理自MEET2023量子位公众号QbitAIAIforScience在今年爆火,不是意外。当下面临的最大挑战,是如何管理预期。无论用AI还是传统手段探索科学,都要基于好的放下过往的成败,步入新的人生境界人老退休回到家中,有原来每天到工作单位上班转变为每天大部分时间在家中。家,是什么?家,简简单单的一个字,但每个人对他的认知都不同。有人说,家是心灵的湾港有人说,家是柴米油盐的生活有考迪兰帕德对我们所有人都很好,我们需要继续为他而战此前结束的足总杯第3轮比赛,拉什福德1球1助1制造乌龙,考迪取得1粒进球打进1粒乌龙,曼联主场31战胜埃弗顿。赛后考迪接受了采访。关于球队遭遇的困境以及主帅兰帕德的下课危机考迪我们ModelY官降后起步不到26万对比汉兰达如何选择?随着新能源国补正式退出市场,近期有不少新能源车企都宣布上调旗下车型的售价,不过特斯拉却唱起了反调,针对Model3和ModelY全系车型进行官方降价。其中,ModelY价格调整后,把握科研风向标之细胞焦亡研究思路原文转自一起实验网httpswww。yiqishengxin。com前言细胞焦亡(pyroptosis)又称细胞炎性坏死。是由炎性小体引发的一种细胞程序性死亡,表现为细胞不断胀大直男人肾亏虚?行事不捷?一方温补肾阳,阳气固秘刘先生,男,33岁,主诉功能减弱,行事不捷。半年前,刘先生醉酒回家,半夜突然呕吐,出现眩晕耳鸣症状,立即去医院治疗,得到缓解。三个月前,刘先生眩晕耳鸣再次出现,接连几天还出现腰酸背5个补阳超猛的中成药,补全身阳气,除骨中寒湿,破一身痰湿阳气到,万病消,如果我们阳气不足,这大疾小病就会源源不断地找上门,大到心梗脑梗,小到肩周炎颈椎病,风湿病,以及痰湿淤血囊肿结节类的增生产物,很多都是阳气不足,导致邪气内生的原因,那阳气不足的人,更容易招来肿瘤?阳气究竟是什么?告诉你真相在检查的时候,如果发现了身体当中有肿瘤,自然很多的患者都会特别的害怕,毕竟在如今的生活当中,有很多的人都因为患有肿瘤而影响了身体健康,甚至还有很多的人被肿瘤夺去了生命,大家也希望自温补阳气,能防百病阳气一到,百病全消,中医认为阳气在我们人体中占有很重要的地位,有的人因为阳气不足导致产生阳虚寒湿的体质,这种体质有哪些特点呢?有些人平时畏寒怕冷,夏天不敢吹空调,冬天要穿得很厚才行顾护好阳气,让孩子不会阳因免疫系统尚未成熟,儿童是新冠病毒的易感人群。如何为儿童做好预防?广州中医药大学第一附属医院董秀兰副主任中医师建议,除了要给儿童佩戴合适的口罩注意手部卫生尽量避免或减少与密集人群的一味善于补阳气的中药,煮水喝,可缓解手脚凉腹泻腰腿疼今天我这篇文说,给你聊聊补阳气的中药。在我眼中,它就是中药世界里的一团火。这团火,可以温暖我们的身体,照耀我们的生命。它就是肉桂。我给你讲一个病例吧,很典型。我从前有一个实习生,女