平台和内容概述
平台**: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文章来源:https://www.toymoban.com/news/detail-785950.html
// 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
- #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文章来源地址https://www.toymoban.com/news/detail-785950.html
// 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):构造函数的实现,它调用了
到了这里,关于Linux QT以太网配置及相关知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!