QT嵌入式 第一节 基础

一、认识QT

1.工程文件.pro分析

image

2.UI设计器

image

3.做一个登录界面

用到组件
放图片,放文本,放GIF图的组件是qlabel。
放账号和密码的对话框用的组件是qlinedit
按钮使用的是qpushbutton

二、信号和槽

1.给控件改名

为了分析代码方便,我们要给控件改名字。要通俗易懂
image

2.什么是信号和槽

信号:指控件发出的特定的信号
比如按钮的信号
image
槽:也叫槽函数,我们可以把槽函数绑定在某一个控件的信号上。

3.怎么关联信号和槽

自动关联

直接选择相应的控件,右键——转到槽
自动关联给我们的工程添加以下内容:
image
槽函数只能声明到private slots 或者 public slots下面
image

手动关联

使用connect函数
connect(ui->Register,SIGNAL(clicked()),this,SLOT(Register_clicked_slots()));
connect(A,SIGNAL(B),C,SLOT(D))
当对象A发出B信号时,就会触发对象C的槽函数D

4.给QT添加图片

  1. 添加图片资源文件
  2. 引用这个图片

三、布局

1.水平布局
2.垂直布局
3.栅栏布局

四、界面切换

创建一个UI界面

1.新建界面类
image
2.设计界面
3.编写逻辑

void Widget::on_Login_clicked()
{
    //qDebug("Login pressed!");
    QString userName = ui->UserName->text();//从UserName文本框获取字符串
    QString Password = ui->Password->text();//从Password文本框获取字符串
    if(userName == "zjq182" && Password == "123")
    {
    Ctrl *ct = new Ctrl;//创建一个窗体对象
    ct->setGeometry(this->geometry());//获取当前窗口参数并设置该窗口
    ct->show();
    }
}

五、仿写串口助手

1.UI

接受框:Plain Text Edit
属性(下拉)选择:Combo Box

2.编写逻辑

#include "widget.h"
#include "ui_widget.h"
#include<QSerialPortInfo>
#include<QMessageBox>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QStringList serialNamePort;
    serialPort = new QSerialPort(this);

    connect(serialPort,SIGNAL(readyRead()),this,SLOT(serialPortRead_SLot()));

    foreach (const QSerialPortInfo &info,QSerialPortInfo::availablePorts()) //形参1类型为串口信息类,形参2为数组,自动搜索当前可用串口,返回值为串口信息类的数组
    {
        serialNamePort<<info.portName();
    }
    ui->serialCb->addItems(serialNamePort);
}

Widget::~Widget()
{
    delete ui;
}
void Widget::serialPortRead_SLot()
{
    QString buf;
    buf = QString(serialPort->readAll());
    ui->RecvEdit->appendPlainText(buf);
}

void Widget::on_OpenBt_clicked()
{
    QSerialPort::BaudRate baudrate;
    QSerialPort::DataBits databits;
    QSerialPort::StopBits stopbits;
    QSerialPort::Parity checkBits;

    if (ui->BitRate->currentText() == "4800")
    {
        baudrate = QSerialPort::Baud4800;
    }
    else if (ui->BitRate->currentText() == "9600") {
        baudrate = QSerialPort::Baud9600;
    }
    else if (ui->BitRate->currentText() == "115200")
    {
        baudrate = QSerialPort::Baud115200;
    }

    if(ui->Data->currentText() == "5")
    {
        databits = QSerialPort::Data5;
    }
    else if(ui->Data->currentText() == "6")
    {
        databits = QSerialPort::Data6;
    }
    else if(ui->Data->currentText() == "7")
    {
        databits = QSerialPort::Data7;
    }
    else if(ui->Data->currentText() == "8")
    {
        databits = QSerialPort::Data8;
    }

    if(ui->Stop->currentText() == "1")
    {
        stopbits = QSerialPort::OneStop;
    }
    else if(ui->Stop->currentText() == "1")
    {
        stopbits = QSerialPort::OneAndHalfStop;
    }
    else if(ui->Stop->currentText() == "2")
    {
        stopbits = QSerialPort::TwoStop;
    }

    if(ui->CheckCb->currentText() == "None")
    {
        checkBits = QSerialPort::NoParity;
    }

    serialPort->setPortName(ui->serialCb->currentText());
    serialPort->setBaudRate(baudrate);
    serialPort->setDataBits(databits);
    serialPort->setStopBits(stopbits);
    serialPort->setParity(checkBits);

    if(serialPort->open(QIODevice::ReadWrite) == true)
    {
        QMessageBox::information(this,"提示","成功");
    }
    else
    {
        QMessageBox::critical(this,"提示","失败");
    }
}

void Widget::on_CloseBt_clicked()
{
    serialPort->close();
}

void Widget::on_SendBt_clicked()
{
    serialPort->write(ui->SendEdit->text().toLocal8Bit().data());
    QString str = ui->SendEdit->text();
    ui->RecvEdit->appendPlainText(str);
}

void Widget::on_ClearBt_clicked()
{
    ui->RecvEdit->clear();
}

六、打包和部署

1.把工厂切换到release模式,然后编译

release模式:基本没有调试信息
debug模式:有很多调试信息

2.找到release模式构建的文件夹

3.改图标,先把图标加到工程所在文件夹,。然后在Pro文件添加代码

RC_ICONS = U.ico
注意图片格式为.ico

4.封包操作,需要用到QT的控制台

image
在桌面上创建一个文件夹,不要用中文路径,将工程文件中exe文件复制过去
控制台输入
cd /d C:\Users\ZJQ\Desktop\serial
windeployqt seial.exe

posted @   安河桥北i  阅读(82)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示