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

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

前言


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


一、配置 buildroot 及编译


make menuconfig

1、Target packages -> Graphic libraries and applications (graphic/text) -> Qt5 ,勾选上 gui

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

目录
相关文章
|
2月前
|
计算机视觉 C++
基于Qt的简易图片浏览器设计与实现
基于Qt的简易图片浏览器设计与实现
105 1
|
2月前
|
存储 容器
QT中QListWidget实现QListWidgetItem图片和文字居中
在使用QT开发软件的过程中,很多时候使用QListWidget来实现列表项的功能,比如MS系统的功能模块菜单,如下面2张图所示,其中第一张图是带文字和图标的列表项,第二张图是纯图标的模式,在最近开发的平台客户端的某个功能模块都用上了。
416 0
|
12月前
荔枝派Zero(全志V3S)运行Qt5程序
本文重新配置 buildroot,利用 buildroot 重新交叉编译 Qt,编译完成后将编译产生的可执行文件拷贝到 SD 卡,板子上电后跑到文件系统下再手动运行。
139 0
|
1天前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
9 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
9天前
Qt绘图(线条、椭圆、矩形、图片滚动)
Qt绘图(线条、椭圆、矩形、图片滚动)
11 3
|
16天前
|
算法 计算机视觉
【Qt&OpenCV QGraphicsView显示OpenCV读入的图片】
【Qt&OpenCV QGraphicsView显示OpenCV读入的图片】
17 0
|
2月前
|
存储 C++ 开发者
QT基础【4-简易的图片查看程序】
QT基础【4-简易的图片查看程序】
|
2月前
|
小程序
Qt实现图片可拖拉
Qt实现图片可拖拉
|
11月前
Qt图片定时滚动播放器+透明过渡动画
解决:[QWidget::paintEngine: Should no longer be called QPainter::begin: Paint device returned engine == 0, type: 1] 需要在哪个控件上绘制,就要在哪个控件类中重写 paintEvent() ,所以本项目 需要使用自定义的MyQLabel继承QLabel
93 0
|
2月前
Qt鼠标悬浮在图片上显示删除字样
Qt鼠标悬浮在图片上显示删除字样