Linux QT以太网配置及相关知识
- 平台和内容概述
- 安装Qt Creator
- 设计用户界面
- 编辑源代码
- 自定义LineEdit
- 创建槽函数
- 以太网逻辑功能实现
- 静态配置
- ui逻辑:
- 功能概述
- 代码实现
- DNS
- 退出程序
- 输入框中的ip规范
- 保存数据和读取数据
- 构建文件
- 编译运行
- 平台注意点
- 开机自动配置以太网
- 总结
平台和内容概述
平台**:AC8015**
运行环境:Linux kernel (4.9) + Systemd + QT 的系统组合,基于编译
框架 Yocto sumo (2.5)构建
基于该平台,编写以太网配置程序,可以动态获取ip;静态配置ip;开机自动配置以太网。
还涉在开发过程中遇到的一些知识点,为了巩固知识,做个记录。
安装Qt Creator
可以从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
首先是上文提到的自定义LineEdit类的头文件
创建头文件:customlineedit.h
// customlineedit.h
#ifndef CUSTOMLINEEDIT_H
#define CUSTOMLINEEDIT_H
#include <QLineEdit>// CustomLineEdit类的声明,继承自QLineEdit
class CustomLineEdit : public QLineEdit
{Q_OBJECTpublic:// 构造函数,允许在构造时传递父类指针,默认为nullptrexplicit CustomLineEdit(QWidget *parent = nullptr);signals:// 自定义信号,表示焦点进入事件void focusInSignal();protected:// 重写基类的虚函数,处理焦点进入事件void focusInEvent(QFocusEvent *event) override;
};#endif // CUSTOMLINEEDIT_H
- #ifndef CUSTOMLINEEDIT_H 和 #define CUSTOMLINEEDIT_H:这是预处理器的条件编译指令,用于防止头文件的多次包含。
- #include :引入了Qt框架的QLineEdit类的头文件,因为CustomLineEdit是继承自QLineEdit的子类。
- class CustomLineEdit : public QLineEdit:声明了一个类 CustomLineEdit,它是 QLineEdit 的子类。
- Q_OBJECT:这是一个Qt宏,用于启用Qt的元对象系统,支持信号与槽(Signals and Slots)机制。
- explicit CustomLineEdit(QWidget *parent =
nullptr);:声明了类的构造函数,允许在构造时传递父类指针,默认为nullptr。 - signals::这是一个Qt关键字,用于声明类中的信号。
- void focusInSignal();:声明了一个自定义信号 focusInSignal(),用于表示焦点进入事件。
- protected::这是一个访问修饰符,表示以下的成员(在这里是 focusInEvent
函数)对派生类和友元类可见,但对外部类不可见。 - void focusInEvent(QFocusEvent *event) override;:声明了一个保护的虚函数,重写了基类
QLineEdit 中的 focusInEvent 函数,用于处理焦点进入事件。 - #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();
}
- #include “customlineedit.h”:引入了自定义LineEdit类的头文件,这个文件中应该包含了类的声明。
- CustomLineEdit::CustomLineEdit(QWidget *parent) :
QLineEdit(parent):构造函数的实现,它调用了