QT嵌入式 第一节 基础
一、认识QT
1.工程文件.pro分析
2.UI设计器
3.做一个登录界面
用到组件
放图片,放文本,放GIF图的组件是qlabel。
放账号和密码的对话框用的组件是qlinedit
按钮使用的是qpushbutton
二、信号和槽
1.给控件改名
为了分析代码方便,我们要给控件改名字。要通俗易懂
2.什么是信号和槽
信号:指控件发出的特定的信号
比如按钮的信号
槽:也叫槽函数,我们可以把槽函数绑定在某一个控件的信号上。
3.怎么关联信号和槽
自动关联
直接选择相应的控件,右键——转到槽
自动关联给我们的工程添加以下内容:
槽函数只能声明到private slots 或者 public slots下面
手动关联
使用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.垂直布局
3.栅栏布局
四、界面切换
创建一个UI界面
1.新建界面类
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的控制台
在桌面上创建一个文件夹,不要用中文路径,将工程文件中exe文件复制过去
控制台输入
cd /d C:\Users\ZJQ\Desktop\serial
windeployqt seial.exe
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)