QT安装教程

[复制链接]
 楼主| gaoyang9992006 发表于 2021-1-21 09:44 | 显示全部楼层 |阅读模式
本帖最后由 gaoyang9992006 于 2021-1-22 10:44 编辑

第一步下载最佳版本5.14.2版本

http://download.qt.io/archive/qt ... dows-x86-5.14.2.exe
如果上面链接无法直接下载请使用迅雷,我听有的群说QT不提供上述下载链接了,不知道是真的假的

第二步启动安装程序,单击下一步Next
000.png
然后输入你注册的QT官方账号,没有账号没法安装
001.png
然后你要允许这些协议,勾选一下,单击下一步
002.png
进入欢迎安装界面,开始进入正式的安装选项,单击下一步
003.png
选择安装路径,比如你要安装到D盘,你直接将C修改成D即可

004.png
根据需要选择你的安装选项,如果只做桌面程序选择如下选项即可。如果需要开发Android可以再选择Android。
005.png
剩下的就是安装了,等待安装过程,我已经安装过了,不真的重复安装了。
最后本帖提供一份我编写的串口助手源码
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"


  3. MainWindow::MainWindow(QWidget *parent) :
  4.     QMainWindow(parent),
  5.     ui(new Ui::MainWindow)
  6. {
  7.     ui->setupUi(this);
  8.     //添加所有串口到comboBox_1里,(串口下拉菜单的名字是comBox_1,可以修改)
  9.     foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
  10.     {
  11.         ui->comboBox_1->addItem(info.portName());
  12.     }
  13.     serial=new QSerialPort(this);//为serial开辟空间
  14.     //设置默认显示的波特率为9600
  15.     ui->comboBox_2->setCurrentIndex(3);
  16.     //给2个单选按钮分成一个组。
  17.     groupButton1=new QButtonGroup(this);
  18.     groupButton1->addButton(ui->radioButton,0);
  19.     groupButton1->addButton(ui->radioButton_2,1);
  20.     ui->radioButton->setChecked(1);
  21.     //给2个单选按钮分成一个组。
  22.     groupButton2=new QButtonGroup(this);
  23.     groupButton2->addButton(ui->radioButton_3,0);
  24.     groupButton2->addButton(ui->radioButton_4,1);
  25.     ui->radioButton_3->setChecked(1);


  26. }

  27. MainWindow::~MainWindow()
  28. {
  29.     delete ui;
  30. }

  31. void MainWindow::recv_data(void)
  32. {
  33.     qDebug() << "Recv Data" << endl;
  34.     QByteArray buf = serial->readAll();
  35.     qDebug() << buf << endl;
  36.     if(!buf.isEmpty())
  37.     {
  38.         /*
  39. QT默认的编码是unicode,不能显示中文的
  40. windows默认使用(GBK/GB2312/GB18030)
  41. 使用fromLocal8Bit()函数,实现了从本地字符集GB到Unicode的转换,用于处理汉语显示乱码等问题
  42. */
  43.         switch (groupButton1->checkedId()) {
  44.         case 0:
  45.             qDebug()<<"ASCII"<<endl;
  46.         {

  47.             QString myStrTemp = QString::fromLocal8Bit(buf); //转化到本地编码格式GB2312支持中文显示

  48.             //如果换行被勾选将会在每次接收显示前换行,另外判断是不是为空,确保第一行不会先给显示个回车符
  49.             if((ui->checkBox_3->isChecked())&&(!ui->textEdit_1->toPlainText().isEmpty()))
  50.                 ui->textEdit_1->insertPlainText("\n");

  51.             ui->textEdit_1->insertPlainText(myStrTemp);

  52.         }
  53.             break;

  54.         case 1:
  55.             qDebug()<<"Hex  "<<endl;
  56.         {

  57.             QDataStream out(&buf,QIODevice::ReadWrite);    //将字节数组读入
  58.             //如果换行被勾选将会在每次接收前换行
  59.             if(ui->checkBox_3->isChecked())
  60.                 ui->textEdit_1->insertPlainText("\n");
  61.             while (!out.atEnd())
  62.             {

  63.                 qint8 outChar =0;
  64.                 out>>outChar;
  65.                 QString str =QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0'));

  66.                 //插入空格

  67.                 if(ui->checkBox_4->isChecked())
  68.                     ui->textEdit_1->insertPlainText(str+' ');
  69.                 else
  70.                     ui->textEdit_1->insertPlainText(str);
  71.             }

  72.         }

  73.             break;

  74.         }

  75.     }
  76. }

  77. //单击搜索串口按钮,重新获取可用的串口
  78. void MainWindow::on_pushButton_1_clicked()
  79. {
  80.     ui->comboBox_1->clear();
  81.     foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
  82.     {
  83.         QSerialPort serial;
  84.         serial.setPort(info);
  85.         if(serial.open(QIODevice::ReadWrite))
  86.             ui->comboBox_1->addItem(info.portName());
  87.     }
  88. }

  89. void MainWindow::on_pushButton_2_clicked()
  90. {
  91.     if(ui->pushButton_2->text()==tr("打开串口"))
  92.     {
  93.         ui->pushButton_2->setText(tr("关闭串口"));
  94.         serial->setPortName(ui->comboBox_1->currentText());
  95.         if(serial->open(QIODevice::ReadWrite))
  96.         {
  97.             qDebug()<<"Open OK"<<endl;
  98.             ui->label_status->setProperty("isOn",true);
  99.             ui->label_status->style()->polish(ui->label_status);
  100.         }
  101.         else
  102.         {
  103.             qDebug()<<"Open Failed"<<endl;
  104.         }
  105.         //设置波特率为当前所选的波特率,因为波特率为字符串,所以用强制转换后才能赋值给设置波特率函数。
  106.         serial->setBaudRate(ui->comboBox_2->currentText().toInt());

  107.         switch (ui->comboBox_3->currentIndex())
  108.         {
  109.         case 0: serial->setStopBits(QSerialPort::OneStop); break;
  110.         case 1: serial->setStopBits(QSerialPort::TwoStop); break;
  111.         case 2: serial->setStopBits(QSerialPort::OneAndHalfStop); break;
  112.         default:break;
  113.         }

  114.         //设置数据位长度,先获取当前索引,然后对应设置。
  115.         switch (ui->comboBox_4->currentIndex())
  116.         {
  117.         case 0: serial->setDataBits(QSerialPort::Data8); break;
  118.         case 1: serial->setDataBits(QSerialPort::Data7); break;
  119.         case 2: serial->setDataBits(QSerialPort::Data6); break;
  120.         case 3: serial->setDataBits(QSerialPort::Data5); break;
  121.         default:break;
  122.         }

  123.         //设置奇偶校验,先获取当前索引,然后对应设置。
  124.         switch (ui->comboBox_5->currentIndex())
  125.         {
  126.         case 0: serial->setParity(QSerialPort::NoParity);   break;
  127.         case 1: serial->setParity(QSerialPort::OddParity);  break;
  128.         case 2: serial->setParity(QSerialPort::EvenParity); break;
  129.         case 3: serial->setParity(QSerialPort::SpaceParity);break;
  130.         case 4: serial->setParity(QSerialPort::MarkParity); break;
  131.         default:break;
  132.         }

  133.         {
  134.         if(ui->checkBox_1->isChecked())
  135.             serial->setDataTerminalReady(true);
  136.         if(ui->checkBox_2->isChecked())
  137.             serial->setRequestToSend(true);
  138.         }


  139.         /*
  140. connect,是QT中的连接函数,将信号发送者sender对象中的信号signal与接受者receiver中的member槽函数联系起来。
  141. */
  142.         connect(serial,SIGNAL(readyRead()),this,SLOT(recv_data()));
  143.     }
  144.     else
  145.     {
  146.         ui->pushButton_2->setText(tr("打开串口"));
  147.         serial->close();
  148.         qDebug()<<"Close OK"<<endl;
  149.         ui->label_status->setProperty("isOn",false);
  150.         ui->label_status->style()->polish(ui->label_status);



  151.     }
  152. }

  153. void MainWindow::on_pushButton_5_clicked()
  154. {
  155.     switch (groupButton2->checkedId())
  156.     {
  157.     case 0:
  158.     {

  159.         QByteArray str;
  160.         if(ui->checkBox_5->isChecked())
  161.         str = (ui->textEdit_2->toPlainText()+'\r').toLocal8Bit();
  162.         else
  163.         str =  ui->textEdit_2->toPlainText().toLocal8Bit();
  164.         qDebug()<<str<<endl;
  165.         serial->write(str);

  166.     }
  167.         break;

  168.     case 1:
  169.     {
  170.         QString str =ui->textEdit_2->toPlainText();
  171.         str.remove(QRegExp("\\s"));//移除空格
  172.         if(str.length()%2==1)
  173.             str=str.remove(str.length()-1,1);//如果最后一位不完整,舍弃。
  174.         QByteArray text=QByteArray::fromHex(str.toLatin1()); //获取文本框的字符串,转换成字流
  175.         qDebug()<<text.data();            // returns 字符串
  176.         serial->write(text.data());
  177.     }

  178.         break;

  179.     default:break;


  180.     }



  181. }
  182. //清除发送文本框内容
  183. void MainWindow::on_pushButton_4_clicked()
  184. {
  185.     ui->textEdit_2->clear();
  186. }
  187. //清除接收文本框内容
  188. void MainWindow::on_pushButton_3_clicked()
  189. {
  190.     ui->textEdit_1->clear();
  191. }


  192. void MainWindow::on_textEdit_2_textChanged()
  193. {

  194. if(groupButton2->checkedId())
  195. {
  196.     ui->textEdit_2->disconnect();
  197.     QString str =ui->textEdit_2->toPlainText();
  198.     int tem_position=ui->textEdit_2->textCursor().position();
  199.     qDebug()<<"001,length:"<<str.length();
  200.     qDebug()<<"002,size:"<<str.size();
  201.     qDebug()<<"003:"<<str;
  202.     if(str.length()>0)
  203.     qDebug()<<"004:"<<str.at(str.length()-1);
  204.     qDebug()<<"--------------------------------";
  205. str=str.toUpper();
  206.     for( int i=0;i<str.length();i++)
  207.     {

  208.         if(((i+1)%3)==0)
  209.          {
  210.            if(!(str.at(i)==' '))
  211.            {
  212.              str.insert(i,' ');
  213.              ui->textEdit_2->setText(str);
  214.              tem_position++;

  215.              {
  216.                  QTextCursor tc = ui->textEdit_2->textCursor();
  217.                  tc.setPosition(tem_position);
  218.                  ui->textEdit_2->setTextCursor(tc);
  219.              }


  220.             qDebug()<<"005:"<<str;

  221.            }
  222.          }
  223.         else
  224.         {
  225.             if(((str[i]>='0')&&(str[i]<='9'))||((str[i]>='A')&&(str[i]<='F')))
  226.             {
  227.             }
  228.             else
  229.             {
  230.              str=str.remove(i,1);
  231.              i--;
  232.              tem_position--;
  233.             }
  234.             ui->textEdit_2->setText(str);

  235.             {
  236.                 QTextCursor tc = ui->textEdit_2->textCursor();
  237.                 tc.setPosition(tem_position);
  238.                 ui->textEdit_2->setTextCursor(tc);
  239.             }

  240.         }

  241.     }
  242.     qDebug()<<"006:"<<str;
  243.     connect(ui->textEdit_2,SIGNAL(textChanged()),this,SLOT(on_textEdit_2_textChanged()));
  244. }

  245. }
游客,如果您要查看本帖隐藏内容请回复





xdqfc 发表于 2021-1-25 10:01 | 显示全部楼层
翻手点赞,之前编图形一直用的是JAVA,包括android studio也是用JAVA,看楼主的这个编程似乎更加简单清晰,特别是程序结构,一眼就看的明白。再赞一个。
 楼主| gaoyang9992006 发表于 2021-1-25 10:10 | 显示全部楼层
xdqfc 发表于 2021-1-25 10:01
翻手点赞,之前编图形一直用的是JAVA,包括android studio也是用JAVA,看楼主的这个编程似乎更加简单清晰, ...

是的,这个上手超级容易,会C语言,再懂一点点C++面向(C语言中结构体应用的扩展)对象就OK了
LUOTYB 发表于 2021-1-25 22:53 | 显示全部楼层
不错,谢谢分享
ymt 发表于 2021-4-28 09:01 | 显示全部楼层
感谢
a511484095 发表于 2021-5-12 17:41 | 显示全部楼层
感谢
zwjiang 发表于 2021-7-23 09:50 | 显示全部楼层
感谢分享
uylor 发表于 2021-8-9 23:38 | 显示全部楼层
thank!thank!thank!
cym_anhui 发表于 2021-10-20 16:33 | 显示全部楼层
不错啊
十日西豪 发表于 2022-5-31 17:30 | 显示全部楼层
小白来学习
心灵@岛屿 发表于 2024-2-23 02:44 | 显示全部楼层
谢谢分享
fs2124890 发表于 2024-3-11 21:03 | 显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2046

主题

16351

帖子

222

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2046

主题

16351

帖子

222

粉丝
快速回复 在线客服 返回列表 返回顶部