平台**:AC8015**
运行环境:Linux kernel (4.9) + Systemd + QT 的系统组合,基于编译
框架 Yocto sumo (2.5)构建
基于该平台,编写以太网配置程序,可以动态获取ip;静态配置ip;开机自动配置以太网。
还涉在开发过程中遇到的一些知识点,为了巩固知识,做个记录。
可以从Qt官方网站(https://www.qt.io/download)下载并按照安装说明进行安装。平台使用的是QT 5.63,因此这里使用的是桌面版本,下载安装即可编写程序。(时间上紧急,没有花时间去安装交叉编译器)
使用Qt Creator新建一个工程,优先设计ui界面,ui具体设计不做详细描述。
运行图示(可视化设计工具来创建用户界面。打开mainwindow.ui文件,使用Qt Creator的“Design”选项卡来设计你的界面。):
ui文件下载
在设计界面过程中,id地址,子网掩码,网关,dns对应的QLineEdit输入框需要自定义,通过继承父类QLineEdit来重写focusInEvent函数。简单理解就是配置静态ip相关信息的时候,数字键盘输入的内容能显示到指定的输入框中。(下文代码会具体说明)
Qt Creator的UI设计编辑界面:
手动编辑该文件.ui文件设计界面:
首先是上文提到的自定义LineEdit类的头文件
创建头文件:customlineedit.h
// customlineedit.h
#ifndef CUSTOMLINEEDIT_H
#define CUSTOMLINEEDIT_H
#include <QLineEdit>
// CustomLineEdit类的声明,继承自QLineEdit
class CustomLineEdit : public QLineEdit
{
Q_OBJECT
public:
// 构造函数,允许在构造时传递父类指针,默认为nullptr
explicit CustomLineEdit(QWidget *parent = nullptr);
signals:
// 自定义信号,表示焦点进入事件
void focusInSignal();
protected:
// 重写基类的虚函数,处理焦点进入事件
void focusInEvent(QFocusEvent *event) override;
};
#endif // CUSTOMLINEEDIT_H
创建源文件customlineedit.cpp
// CustomLineEdit类的构造函数实现
CustomLineEdit::CustomLineEdit(QWidget *parent)
: QLineEdit(parent)
{
// 构造函数中的初始化列表将父类的构造函数(QLineEdit)传递给基类的构造函数
}
// CustomLineEdit类的focusInEvent(焦点进入事件)的实现
void CustomLineEdit::focusInEvent(QFocusEvent *event)
{
// 调用基类(QLineEdit)的focusInEvent函数,确保基类的相应事件处理逻辑被执行
QLineEdit::focusInEvent(event);
// 发射自定义的信号focusInSignal(),表示焦点进入事件已发生
emit focusInSignal();
}