荔枝派Zero(全志V3S)基于QT实现在LCD显示图片

2023-10-26


前言

有这样一个需求,通过配置 QT,在 linux 下实现显示我所想要显示的图片,实现的方式是我可以在命令行将图片的路径作为入参传入进去,从而对其进行显示,在之前的文章中已实现了在板子上运行 QT5 程序,此需求要自己写个 QT 程序,且需要对 buildroot 进行裁剪支持一些常用的图片格式即可。


一、配置 buildroot 及编译

make menuconfig

1、Target packages -> Graphic libraries and applications (graphic/text) -> Qt5 ,勾选上 gui module、widgets module、GIF support、JPEG support、PNG support
在这里插入图片描述
2、保存配置并退出
在这里插入图片描述
3、编译 buildroot
回到 buildroot-2017.08 的根目录下,执行 make,等待编译结束

二、写 QT 代码

在这里插入图片描述
main.cpp

#include "widget.h"

#include <QApplication>
#include <QString>
#include <QDebug>

QString image_path;

int main(int argc, char *argv[])
{
    if (argc < 2) {
        qDebug() << "pelase input image path\n";

        return -1;
    }
    image_path = argv[1];
    qDebug() << "image_path = " << image_path << "\n";

    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QLabel>
#include <QMovie>
#include <QImage>
#include <QPainter>

extern QString image_path;

void Widget::paintEvent(QPaintEvent *e)
{
    QPainter painter(this);
    QPixmap pix;
    pix.load(image_path);
    painter.drawPixmap(0, 0, 800, 480, pix);
}

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    resize(800, 480); // 设置窗口大小
}

Widget::~Widget()
{
    delete ui;
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void paintEvent(QPaintEvent *);

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

ImageShow.pro

QT += widgets

HEADERS       = widget.h
FORMS         = widget.ui
SOURCES       = main.cpp \
                widget.cpp

# install
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/widgets/ImageShow
INSTALLS += target

widget.ui 界面没有放置控件,因此这里不罗列出来了

三、编译可执行文件

1、在 ~/licheepi_zero/buildroot-2017.08/output/build/qt5base-5.6.2/examples/widgets/widgets/ 目录下新建一个名为 ImageShow 的文件夹,将上述文件放置进去,并赋予权限

mkdir ImageShow
sudo chmod 777 ImageShow/ -R
cd ImageShow
ls

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、qmake 生成 Makefile

/home/Gnep/licheepi_zero/buildroot-2017.08/output/build/qt5base-5.6.2/bin/qmake ImageShow.pro

在这里插入图片描述
3、make 生成可执行文件

make

在这里插入图片描述

四、拷贝到 SD 卡

1、把 buildroot-2017.08 产生的 rootfs.tar 解压到刚创建的rootfs分区根目录
在 buildroot-2017.08 根目录下

find ./ -name rootfs.tar
sudo tar xf ./output/images/rootfs.tar -C /media/Gnep/rootfs/

在这里插入图片描述
2、将上述编译好的可执行文件也拷贝到 SD 卡的 rootfs 分区

sudo cp ImageShow /media/Gnep/rootfs/

在这里插入图片描述
3、此外也找两张图片拷贝到 SD 卡的 rootfs 分区,一张为 google.png,另一张为 Spongebob.jpg

五、上板子测试

1、到根目录下 ls 查看一下我们需要用到的文件

cd /
ls

在这里插入图片描述
2、运行 ImageShow 并指定图片路径,查看 LCD 屏幕
①、显示 google.png

./ImageShow google.png   -platform linuxfb

在这里插入图片描述
在这里插入图片描述

②、显示 Spongebob.jpg

./ImageShow Spongebob.jpg  -platform linuxfb

在这里插入图片描述
在这里插入图片描述

问题记录
第一次在板子上测试的时候屏幕为白屏,图片显示不出来,后来将 buildroot 先执行了 make distclen 再重新编译了 buildroot 后再次上板子测试才解决了问题

六、资源自取

方式1:github链接
https://github.com/Gnepuil79/licheepi.git

方式2:百度网盘
链接:https://pan.baidu.com/s/1vo-tTXZw4ePBgL0yeqvfEg
提取码:2wlt


我的qq:2442391036,欢迎交流!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

荔枝派Zero(全志V3S)基于QT实现在LCD显示图片 的相关文章

  • 如何通过 QTest 访问 QMessageBox

    我正在创建一些自动化的图形用户界面测试在我的应用程序中使用QTest 我可以使用以下命令从我的应用程序访问小部件 savePushButton mainWindow gt findChild
  • 在 Qt Creator 中推广小部件

    Qt 创建者可以选择将一个小部件提升为从基本小部件派生的自定义创建的类 我想使用它来将小部件提升为当前项目中的类 Qt 创建者询问我有关类名和头文件名的信息 这些值直接转到 ui文件 然后到ui myform h 问题是该文件可能 通常是
  • 如何在小部件状态之间实现 QListWidget 项目的一致突出显示?

    我正在使用 PyQT 4 8 3 创建一个带有两个 QListWidget 的对话框 两者都允许多重选择 我发现 如果启用了这些 QListWidget 则仅当 QListWidget 具有焦点时 所选项目才会以蓝色突出显示 如果没有焦点
  • 获取一段代码的执行时间

    如何获取 Qt C 中一段代码的执行时间 毫秒 Use the QTime班级 开始它 start or restart 然后检查经过的毫秒数 elapsed 当然 精度最终取决于底层操作系统 尽管在主要平台上 您应该可以轻松获得真正的毫秒
  • 为什么 Qt 无法识别我的头文件?无法打开包含文件 没有这样的文件或目录

    我的 pro 文件中有以下内容 并且我有以下文件 include headerhere 例如 include StdAfx h 不过我得到了 错误无法打开包含文件 StdAfx h 没有这样的文件或目录 无论我使用还是出现同样的错误 inc
  • QTreeView 中某些索引的自定义文本颜色

    我想使用自定义颜色 取决于与每行相关的数据 在 QTreeView 小部件的一列中绘制文本 我尝试重载 drawRow 受保护方法并更改样式选项参数 如下所示 一个精简示例 virtual void drawRow QPainter p p
  • 悬停时突出显示自定义 QWidgetAction

    我的应用程序有一个QMenuBar与一些QMenus 其中每个都有多个QActions 和子QMenus 大部分的QAction 项目是衍生品QWidgetAction并重新实施QWidgetAction createWidget方法 通常
  • 查找 QWidget 所在的屏幕

    具有功能 QApplication desktop gt screenCount QApplication desktop gt screenGeometry 我发现我的系统上存在多少屏幕以及它们位于哪个屏幕坐标上 现在我想找出 QWidg
  • 下载时出错

    下载控制台会返回以下错误 帧加载因策略更改而中断 Example a href app exe Start Download a Console Preview 我应该在中配置一些东西吗Compiler or QWeb设置 我发现了 在传统
  • QML - 不支持命令式代码

    有人可以评论这个事实吗QML 任何命令式JavaScript代码不会被执行 除非它是额外组件 http blog qt digia com blog 2011 05 05 qt quick designer in qt creator 2
  • QT5 迁移和 Boost:if.hpp:宏参数不匹配错误

    在 qt 4 8 中我使用了 boost 1 52 一切都好 现在我尝试转移到 QT5 并得到if hpp Macro argument mismatch线上错误131 BOOST MPL AUX NA SPEC 3 if 在一些QT论坛
  • 主动调整主窗口内小部件的大小

    I have a few widgets in a main window i want the user to be able to resize the widgets inside the window as they please
  • 使用 Jenkins xUnit 插件显示 QTestlib 的结果

    我正在尝试将 Jenkins xUnit 插件用于我的 Qt 单元测试项目 但我无法使其工作 这是我到目前为止所做的 首先 我使用 qmakebuilder 插件构建我的单元测试项目 向 qmakebuilder 插件提供 pro 然后添加
  • 如何强制 QCompleter 检查 QLineEdit 中的第二个单词

    我有一个功能可以实现带有自动完成功能的文本框 我找到了一个使用 QLineEdit 和 QCompleter 的代码 因此我有我的字符串值 一 二 三 等 一旦我输入 on 完成器就会建议我列表中带有前缀 on 的每个单词 但是当我从列表中
  • Android - 发送 HDMI CEC 命令到电视 - minix - libCEC

    我正在开发 Minix NEO X8 H Android 媒体中心 4 4 2 我需要向电视发送 HDMI CEC 命令 当我的应用程序收到呼叫时 我想自动将电视源更改为 Minix hdmi来源 实际上 Minix 提供了一些启用 HDM
  • 如何将 Windows 桌面应用程序转换为 Mac 桌面应用程序?

    我需要将 C NET Windows 桌面应用程序转换为 Mac 我读过有关 Qt REAL Studio LiveCode RunRev wxWidgets 和 Mono 的跨平台方面的内容 www mono project com 和h
  • Qt4.5:在 app.exec 之前使用基于事件循环的 localsocket

    我遇到了 Qt 的实际问题 我正在使用一个与 QLocalSocket 与另一个进程 管道 unix 套接字 通信的类 并且我需要在其他事件发生之前进行通信 即在 app exec 启动之前 或更准确地说 应用程序启动后立即进行 我正在使用
  • 我的 QFileSystemModel 在 PyQt 中无法按预期工作

    EDIT2 model hasChildren parentIndex 回报True but model rowCount parentIndex 回报0 QFileSystemModel 只是 PyQt 中的 fubar 吗 EDIT 经
  • 如何根据内容调整QTableView的高度?

    在我的布局中 动态生成的 QTableView 似乎已调整大小以仅显示一行 我想让表视图的容器有一个滚动条 而不是单个表视图 它应该显示完整的内容 显然 Qt 没有为此内置任何东西 您需要手动计算和设置大小 这就是我垂直调整大小的方法 Qt
  • 如何可视化来自谷歌协议缓冲区的数据?

    我想使用谷歌协议缓冲区存储数据 另一种序列化格式也可以 然后有一个用户界面来浏览该数据 是否有 C 框架 API 可以让我做到这一点 例如 它可以使用protobuf的反射接口 然后将数据填充到Qt的QTableView 或从其他工具包 中

随机推荐

  • Java反射学习记录

    一 反射概述 反射允许程序在运行中获取类的内部信息 例如构造器 成员变量 成员方法等 类加载之后 在堆中生成一个Class类的对象 一个类只有一个Class对象 这个对象包含类的完整结构信息 二 入门案例 通过配置文件中的内容生成指定类的对
  • 创建完整团队的艺术:敏捷如何改变我们与客户的工作方式

    来源 Ackarlix博客 http www ackarlix com 十年前 敏捷宣言 的作者们希望我们重新思考 我们作为程序员与客户协作的方式 我和我的博士学位顾问Robert Biddle以及James Noble都深受启发 充满希望
  • python --- multiprocessing实现多进程

    文章目录 进程理论知识 multiprocessing模块实现多进程 进程池 进程理论知识 进程就是正在运行的程序 是计算机进行资源分配的最小单位 各个进程都有独立的数据 相互隔离 Linux里进程的状态 R 运行状态runable S 中
  • 各种网络协议的类型、优缺点、作用

    一 网络协议的定义 网络协议是一种特殊的软件 是计算机网络实现其功能的基本机制 网络协议的本质是规则 即各种硬件和软件必须遵循的共同规则 网络协议并不是一套单独的软件 他融合于其他所有软件系统中 协议在网络中无所 不在 二 常用的网络协议
  • 24

    以下内容出自 MySQL 实战 45 讲 https time geekbang org column article 76446 24 MySQL是怎么保证主备一致的 MySQL 主备的基本原理 如图所示就是基本的主备切换流程 M S结构
  • socket可读,可写的条件

    socket可读可写条件 经常做为面试题被问 因为它考察被面试者对网络编程的基础了解的是不是够深入 要了解socket可读可写条件 我们先了解几个概念 1 接收缓存区低水位标记 用于读 和发送缓存区低水位标记 用于写 每个套接字有一个接收低
  • Oracle数据库运维、备份常用指令

    Oracle数据库运维 备份常用指令 1 Oracle数据泵备份导出 1 1 准备工作 在linux系统下创建导出结果存放的文件夹 切记要切换到oracle用户创建 否则会出现权限问题 su oracle mkdir home oracle
  • keepalived高可用服务的VIP地址无法访问

    环境 keepalived nginx实现高可用 VIP地址可以正常生成 也可正常漂移 可以实现故障切换 VIP地址只能在本地服务器ping通 其他内网服务器上无法ping通VIP地址 防火墙和selinux都已关闭 原因一 服务器启动了i
  • day37 445 数字反转 (字符串处理、模拟)

    445 数字反转 给定一个整数 请将该数各个位上数字反转得到一个新数 新数也应满足整数的常见形式 即除非给定的原数为零 否则反转后得到的新数的最高位数字不应为零 输入格式 输入共1行 1个整数N 输出格式 输出共1行 1个整数表示反转后的新
  • 集群基础7——keepalived脑裂

    文章目录 一 脑裂概念 二 脑裂产生原因 三 解决方案 四 脑裂监控 一 脑裂概念 在高可用 HA 系统中 当联系2个节点的 心跳线 断开时 本来为一整体 动作协调的HA系统 就分裂成为2个独立的个体 由于相互失去了联系 都以为是对方出了故
  • 常用 Git 命令行操作

    本文记录了一些常用 Git 命令行操作的具体使用方式 git clone git clone REPOSITORY URL 拉取仓库 并使用仓库名作为本地文件名 git clone REPOSITORY URL FOLDER 拉取仓库 并使
  • android new intent(),Android:关于onNewIntent()触发机制及注意事项

    在阅读该篇日志前 先熟悉一下Android的四种启动模式 因为onNewIntent并不是在所有启动模式下都会执行的 一 onNewIntent 在IntentActivity中重写下列方法 onCreate onStart onResta
  • Flink水位线不触发问题

    窗口计算时遇到好几次水位线不触发的情况 简单总结下 首先 介绍下Flink的事件时间 EventTime 和水位线 Watermarks 的概念 一 处理时间 如果要构造一个实时的流式应用 或早或晚都会接触到EventTime这个概念 现实
  • 用vscode写markdown的正确姿势

    写markdown一直没找到特别顺手的工具 这两天试了试vscode 被惊艳到到了 特此记录一下 1 安装vscode 之所以罗嗦一下安装 是因为安装版明显不如解压绿色版好用 特此标记一下 2 安装markdown插件 vscode默认是支
  • 机器学习——模型评估

    在学习得到的模型投放使用之前 通常需要对其进行性能评估 为此 需使用一个 测试集 testing set 来测试模型对新样本的泛化能力 然后以测试集上的 测试误差 tootino error 作为泛化误差的近似 我们假设测试集是从样本真实分
  • Shiro

    文章目录 资料 概念 基本功能 架构原理 登录认证 概念 流程 角色授权 概念 流程 代码 大致流程 shiro配置解读 ShiroConfig 登录 认证 授权 详细代码 pom login html index html UserCon
  • 表面缺陷检测的几种方法

    1 location blob feature 2 location differ feature 3 frequency domain spatial domain 4 photometric stereo 5 calibration f
  • python之迷你版Httpd服务器

    miniHttpd py import os sys platform import posixpath import BaseHTTPServer from SocketServer import ThreadingMixIn impor
  • 软件测试的心理学和经济学、软件测试的原则

    软件测试的艺术 读书笔记 第二章 第二章 软件测试的心理学和经济学 前言 软件测试是一项技术性工作 但同时涉及经济学和人类心理学的一些重要因素 在理想情况下 我们会测试程序的所有可能执行情况 而在大多数情况下 这几乎是不可能的 即使是一个简
  • 荔枝派Zero(全志V3S)基于QT实现在LCD显示图片

    文章目录 前言 一 配置 buildroot 及编译 二 写 QT 代码 三 编译可执行文件 四 拷贝到 SD 卡 五 上板子测试 六 资源自取 前言 有这样一个需求 通过配置 QT 在 linux 下实现显示我所想要显示的图片 实现的方式