LinkLib例子之十:Hi3531D UI,触屏界面开发

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_45326556/article/details/94162667

Hi3531D UI,触屏界面开发

UI

该示例程序在Mix程序的基础上,增加了UI界面。

程序中将一个QWidget的背景进行透明处理,并显示了一个按钮,用户可以在实际开发中综合运用半透明图片、自定义字体等来实现更丰富的操作界面。

程序中的Sleep是为了解决部分触屏设备在信号中断时会进入休眠导致usb触屏驱动断开的问题,等待3秒钟可以确保usb触屏驱动已启动。

准备工作

•参照用户手册搭建开发环境、编译3531D工程、配置网络启动参数。
•将带有HDMI音视频输出功能的设备(如摄像机、笔记本、机顶盒等)接入评估板的HDMI-AHDMI-B接口
•将评估板的HDMI-OUT接入触屏,如没有触屏设备,也可以接普通显示器+usb鼠标。
•上电,进入/root/demo目录
•运行UI程序
•触摸或鼠标点击按钮,画面中两个输入源的位置将交换

运行结果

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

源程序

完整工程https://gitee.com/LinkPi/3531D/tree/master/UI

//main.cpp
#include "widget.h"
#include <QApplication>
#include "Link.h"
#include <unistd.h>

int main(int argc, char *argv[])
{
    Link::init();

    LinkObject *vo=Link::create("OutputVo");
    QVariantMap dataVo;
    dataVo["type"]="hdmi";
    vo->start(dataVo);
    sleep(3);
    QApplication a(argc, argv);

    Widget w;
    w.vo=vo;
    w.init();
    w.show();

    return a.exec();
}

//widget.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QPalette pal = palette();
    pal.setBrush(QPalette::Base, Qt::transparent);
    setPalette(pal);
    setAttribute(Qt::WA_TranslucentBackground, true);
}

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

void Widget::init()
{
    ai_1=Link::create("InputAi");
    QVariantMap dataAi_1;
    dataAi_1["interface"]="HDMI-A";
    ai_1->start(dataAi_1);

    ai_2=Link::create("InputAi");
    QVariantMap dataAi_2;
    dataAi_2["interface"]="HDMI-B";
    ai_2->start(dataAi_2);

    vi_1=Link::create("InputVi");
    QVariantMap dataVi_1;
    dataVi_1["interface"]="HDMI-A";
    vi_1->start(dataVi_1);

    vi_2=Link::create("InputVi");
    QVariantMap dataVi_2;
    dataVi_2["interface"]="HDMI-B";
    vi_2->start(dataVi_2);

    mixA=Link::create("MixA");
    QVariantMap dataMixA;
    dataMixA["main"]=ai_1->name();
    mixA->start(dataMixA);

    mixV=Link::create("MixV");
    QVariantMap dataMixV;
    QVariantList srcs;
    QVariantList layouts;
    QVariantMap lay;
    lay["x"]=0;
    lay["y"]=0;
    lay["w"]=0.6;
    lay["h"]=0.6;
    lay["a"]=1;
    lay["index"]=0;
    layouts<<lay;
    lay["x"]=0.4;
    lay["y"]=0.4;
    lay["index"]=1;
    layouts<<lay;
    dataMixV["layout"]=layouts;
    srcs<<vi_1->name()<<vi_2->name();
    dataMixV["src"]=srcs;
    mixV->start(dataMixV);

    ao=Link::create("OutputAo");
    QVariantMap dataAo;
    dataAo["interface"]="HDMI-OUT";
    ao->start(dataAo);

    ai_1->linkA(mixA);
    ai_2->linkA(mixA)->linkA(ao);

    vi_1->linkV(mixV);
    vi_2->linkV(mixV)->linkV(vo);

}

void Widget::on_pushButton_clicked()
{
    QVariantList list;
    list<<vi_1->name()<<vi_2->name();
    mixV->invoke("swap",list);
}

猜你喜欢

转载自blog.csdn.net/weixin_45326556/article/details/94162667
今日推荐