版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
UI
该示例程序在Mix程序的基础上,增加了UI
界面。
程序中将一个QWidget
的背景进行透明处理,并显示了一个按钮,用户可以在实际开发中综合运用半透明图片、自定义字体等来实现更丰富的操作界面。
程序中的Sleep
是为了解决部分触屏设备在信号中断时会进入休眠导致usb
触屏驱动断开的问题,等待3
秒钟可以确保usb
触屏驱动已启动。
准备工作
•参照用户手册搭建开发环境、编译3531D
工程、配置网络启动参数。
•将带有HDMI
音视频输出功能的设备(如摄像机、笔记本、机顶盒等)接入评估板的HDMI-A
、HDMI-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);
}