准备工作
安装Qt交叉编译器
将fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh 拷贝到 Ubuntu 虚拟机
新建安装目录
/opt/fsl-imx-x11/4.1.15-2.1.0
设置环境变量
source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
查看交叉编译器版本
arm-poky-linux-gnueabi-gcc --version
安装lzop工具
sudo apt-get update
sudo apt-get install lzop
sudo apt-get install libncurses*
ARM板
连接电源和串口,打开SecureCRT软件,连接到开发板上
编写Qt程序
打开Qt软件编程,编程结束编译或者运行,查看是否有错误,切换终端路径到Qt工程位置,如果是新的终端,需要重新设置环境变量
source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
然后执行
qmake
然后执行
make
最后将工程目录下的以工程名字命名的执行文件拷贝到开发板上。可以使用nfs挂载的方法或者使用串口发送,串口发送需要将执行文件拷贝到Windows桌面,然后点击SecureCRT的传输,点击Zmodem Upload List…,选择需要拷贝的文件,然后点击上传。
ARM板
文件拷贝过来后给文件加上执行权限,然后执行即可。
Qt点灯
使用Qt界面的按钮对arm板的灯进行点亮和熄灭,并进行相应的界面显示
头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
public slots:
void pushbutton();
private:
Ui::MainWindow *ui;
bool stat;
};
#endif // MAINWINDOW_H
源文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
stat = false;
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(pushbutton()));
system("echo none > /sys/class/leds/sys-led/trigger");
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::pushbutton()
{
stat = !stat;
if(stat)
{
qDebug() << "echo 1 > /sys/class/leds/sys-led/brightness" << endl;
system("echo 1 > /sys/class/leds/sys-led/brightness");
ui->pushButton->setText("熄灭");
}
else
{
qDebug() << "echo 0 > /sys/class/leds/sys-led/brightness" << endl;
system("echo 0 > /sys/class/leds/sys-led/brightness");
ui->pushButton->setText("点亮");
}
}
Qt显示图片
使用Qt界面显示图片
头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDir>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void showPixmap(QString path);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
源文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
showPixmap("tupian1.jpeg");
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::showPixmap(QString path)
{
//自动加载当前路径
QDir dir;
QDir::setCurrent(QCoreApplication::applicationDirPath());
QString pathname = dir.currentPath();
pathname = pathname + "/" + path;
qDebug() << pathname << endl;
//设置图片路径
QPixmap pixmap;
pixmap.load(pathname);
//设置图片自适应QLabel的大小
QPixmap dest=pixmap.scaled(ui->label->size(),Qt::KeepAspectRatio);
//label加载图片
ui->label->setPixmap(dest);
}
Qt滑动屏幕
使用Qt界面滑动屏幕切换图片
头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDir>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void showPixmap(QString path);
bool eventFilter(QObject *watched, QEvent *event);
private:
Ui::MainWindow *ui;
int tupianNum;
};
#endif // MAINWINDOW_H
源文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QTouchEvent>
#include <QMouseEvent>
#include <QEvent>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
tupianNum = 1;
QString path = "tupian" + QString::number(tupianNum) + ".jpeg";
showPixmap(path);
ui->label->installEventFilter(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::showPixmap(QString path)
{
//自动加载当前路径
QDir dir;
QDir::setCurrent(QCoreApplication::applicationDirPath());
QString pathname = dir.currentPath();
pathname = pathname + "/" + path;
qDebug() << pathname << endl;
//设置图片路径
QPixmap pixmap;
pixmap.load(pathname);
//设置图片自适应QLabel的大小
QPixmap dest=pixmap.scaled(ui->label->size(),Qt::KeepAspectRatio);
//label加载图片
ui->label->setPixmap(dest);
}
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
static QPoint startPoint; // 起始点
// 检查事件类型是否为鼠标按钮按下事件
if (event->type() == QEvent::MouseButtonPress)
{
// 将事件转换为鼠标事件
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
if (mouseEvent->button() == Qt::LeftButton)
{
startPoint = mouseEvent->pos();// 鼠标左键按下时,记录起始位置
}
}
// 检查事件类型是否为鼠标移动事件
else if (event->type() == QEvent::MouseMove)
{
}
// 检查事件类型是否为鼠标按钮释放事件
else if (event->type() == QEvent::MouseButtonRelease)
{
// 将事件转换为鼠标事件
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
QPoint endPoint = mouseEvent->pos();// 获取鼠标当前位置
int dx = endPoint.x() - startPoint.x();
if (qAbs(dx) > 50)
{
if (dx > 0)
{
tupianNum = ++tupianNum > 4? 1:tupianNum;
QString path = "tupian" + QString::number(tupianNum) + ".jpeg";
showPixmap(path);
qDebug() << "Right swipe detected";
}
else
{
tupianNum = --tupianNum < 1? 4:tupianNum;
QString path = "tupian" + QString::number(tupianNum) + ".jpeg";
showPixmap(path);
qDebug() << "Left swipe detected";
}
}
}
return QObject::eventFilter(watched, event);//确保其他未被处理的事件能够被正确传播和处理
}