当前位置: 首页 > news >正文

[Gtk] layout.ui

播放器layout:

#

 

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
  <requires lib="gtk+" version="3.20"/>
  <object class="GtkWindow" id="main_window">
    <property name="title">GTK Video Player</property>
    <property name="default-width">1200</property>
    <property name="default-height">600</property>
    <child>
      <object class="GtkBox" id="main_hbox">
        <property name="orientation">horizontal</property>
        <property name="spacing">5</property>

        <!-- Left Sidebar -->
        <child>
          <object class="GtkBox" id="sidebar">
            <property name="orientation">vertical</property>
            <property name="spacing">5</property>
            <property name="width-request">150</property> <!-- Fixed width of sidebar -->

            <!-- Add 10 Buttons to the sidebar -->
            <child>
              <object class="GtkButton" id="button_1">
                <property name="label">Button 1</property>
              </object>
            </child>
            <child>
              <object class="GtkButton" id="button_2">
                <property name="label">Button 2</property>
              </object>
            </child>
            <child>
              <object class="GtkButton" id="button_3">
                <property name="label">Button 3</property>
              </object>
            </child>
            <child>
              <object class="GtkButton" id="button_4">
                <property name="label">Button 4</property>
              </object>
            </child>
            <child>
              <object class="GtkButton" id="button_5">
                <property name="label">Button 5</property>
              </object>
            </child>
            <child>
              <object class="GtkButton" id="button_6">
                <property name="label">Button 6</property>
              </object>
            </child>
            <child>
              <object class="GtkButton" id="button_7">
                <property name="label">Button 7</property>
              </object>
            </child>
            <child>
              <object class="GtkButton" id="button_8">
                <property name="label">Button 8</property>
              </object>
            </child>
            <child>
              <object class="GtkButton" id="button_9">
                <property name="label">Button 9</property>
              </object>
            </child>
            <child>
              <object class="GtkButton" id="button_10">
                <property name="label">Button 10</property>
              </object>
            </child>
          </object>
        </child>

        <!-- Center Video Area -->
        <child>
          <object class="GtkDrawingArea" id="video_area">
            <property name="hexpand">true</property>
            <property name="vexpand">true</property>
          </object>
        </child>

        <!-- Right Text Output Area -->
        <child>
          <object class="GtkTextView" id="text_view">
            <property name="width-request">300</property> <!-- Fixed width for text output -->
            <property name="hexpand">false</property>
            <property name="vexpand">true</property>
          </object>
        </child>

      </object>
    </child>
  </object>
</interface>

 

 

 

#include <gtk/gtk.h>
#include <gst/gst.h>
#include <gst/video/videooverlay.h>

static GstElement *pipeline;

static void realize_cb(GtkWidget *widget, gpointer data) {
    GdkWindow *window = gtk_widget_get_window(widget);
    guintptr window_handle = GDK_WINDOW_XID(window);

    GstVideoOverlay *overlay = GST_VIDEO_OVERLAY(pipeline);
    gst_video_overlay_set_window_handle(overlay, window_handle);
}

static void activate(GtkApplication *app, gpointer user_data) {
    GtkBuilder *builder = gtk_builder_new();
    gtk_builder_add_from_file(builder, "layout.ui", NULL);

    GtkWidget *window = GTK_WIDGET(gtk_builder_get_object(builder, "main_window"));
    GtkWidget *drawing_area = GTK_WIDGET(gtk_builder_get_object(builder, "video_area"));

    g_signal_connect(drawing_area, "realize", G_CALLBACK(realize_cb), NULL);

    gtk_widget_show_all(window);

    // 创建 GStreamer 管道并播放视频
    pipeline = gst_parse_launch("playbin uri=file:///path/to/video", NULL);
    GstVideoOverlay *overlay = GST_VIDEO_OVERLAY(pipeline);
    gst_video_overlay_set_window_handle(overlay, GDK_WINDOW_XID(gtk_widget_get_window(drawing_area)));

    gst_element_set_state(pipeline, GST_STATE_PLAYING);
}

int main(int argc, char **argv) {
    GtkApplication *app;
    int status;

    gst_init(&argc, &argv);

    app = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE);
    g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
    
    status = g_application_run(G_APPLICATION(app), argc, argv);

    gst_element_set_state(pipeline, GST_STATE_NULL);
    gst_object_unref(pipeline);
    g_object_unref(app);

    return status;
}

 

 

 

 

<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <requires lib="gtk+" version="3.20"/>
  <object class="GtkWindow" id="main_window">
    <property name="title">GTK Video Player</property>
    <property name="default-width">1200</property>
    <property name="default-height">600</property>
    <child>
      <object class="GtkBox" id="main_hbox">
        <property name="orientation">horizontal</property>
        <property name="spacing">5</property>

        <!-- Left Sidebar with scrollable content -->
        <child>
          <object class="GtkScrolledWindow" id="scrolled_sidebar">
            <property name="width-request">150</property>
            <property name="hscrollbar-policy">never</property>
            <property name="vscrollbar-policy">automatic</property>
            <child>
              <object class="GtkViewport">
                <child>
                  <object class="GtkBox" id="sidebar">
                    <property name="orientation">vertical</property>
                    <property name="spacing">5</property>

                    <!-- Add 10 Buttons to the sidebar -->
                    <child>
                      <object class="GtkButton" id="button_1">
                        <property name="label">Button 1</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkButton" id="button_2">
                        <property name="label">Button 2</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkButton" id="button_3">
                        <property name="label">Button 3</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkButton" id="button_4">
                        <property name="label">Button 4</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkButton" id="button_5">
                        <property name="label">Button 5</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkButton" id="button_6">
                        <property name="label">Button 6</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkButton" id="button_7">
                        <property name="label">Button 7</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkButton" id="button_8">
                        <property name="label">Button 8</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkButton" id="button_9">
                        <property name="label">Button 9</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkButton" id="button_10">
                        <property name="label">Button 10</property>
                      </object>
                    </child>
                  </object>
                </child>
              </object>
            </child>
          </object>
        </child>

        <!-- Separator between sidebar and drawing area -->
        <child>
          <object class="GtkSeparator" id="separator">
            <property name="orientation">vertical</property>
          </object>
        </child>

        <!-- Center Video Area -->
        <child>
          <object class="GtkDrawingArea" id="video_area">
            <property name="hexpand">true</property>
            <property name="vexpand">true</property>
          </object>
        </child>

        <!-- Right Text Output Area -->
        <child>
          <object class="GtkTextView" id="text_view">
            <property name="width-request">300</property>
            <property name="hexpand">false</property>
            <property name="vexpand">true</property>
          </object>
        </child>

      </object>
    </child>
  </object>
</interface>

 

 

相关文章:

[Gtk] layout.ui

播放器layout&#xff1a; # <?xml version"1.0" encoding"UTF-8"?> <!-- Generated with glade 3.38.2 --> <interface> <requires lib"gtk" version"3.20"/> <object class"GtkWindow"…...

Spring MVC:精通JSON数据返回的几种高效方式

前言 在实际开发中&#xff0c;我们在前后端传送数据通常使用Json格式&#xff0c;而在Spring MVC中返回Json格式的方式有多种&#xff0c;接下来我将介绍其中一些。 准备工作 为了演示Json格式的数据&#xff0c;我们准备一个实体类&#xff0c;例如User&#xff0c;这些可以测…...

[LeetCode 题3] 没有重复字符的最长的子字符串

问题描述 输入&#xff1a;一个字符串 s。输出&#xff1a;最长的无重复字符的子串的长度。 示例 输入: s "abcabcbb" 输出: 3 解释: 最长的无重复字符的子串是 "abc"&#xff0c;长度为 3。 输入: s "bbbbb" 输出: 1 解释: 最长的无重复字…...

YoloDotNet 在工业检测中的应用详解

文章目录 一、数据收集与标注二、模型选择与训练三、检测流程设计四、结果评估与优化五、与工业生产线集成一、数据收集与标注 在工业检测中,首先需要收集大量的相关工业产品图像数据。这些数据应涵盖不同的产品类型、缺陷种类以及各种可能的生产状态。例如,对于电子产品的检…...

DataFrame增删改数据

目录 准备数据 DataFrame添加列 直接添加列数据 使用insert添加列数据 DataFrame删除行列 准备数据 删除行 删除列 DataFrame数据去重 准备数据 import pandas as pd df pd.read_csv("../data/b_LJdata.csv") df DataFrame添加列 直接添加列数据 1&…...

一站式解决App下载量统计,Xinstall引领新潮流

在移动应用市场中&#xff0c;App下载量是衡量应用受欢迎程度和市场表现的重要指标。然而&#xff0c;对于许多开发者而言&#xff0c;如何精准统计App下载量却是一个不小的挑战。幸运的是&#xff0c;如今有了一款专业的App全渠道统计服务商——Xinstall&#xff0c;它能够帮助…...

ijkMediaPlayer+ TextureView 等比全屏播放视频(避免拉伸)

TextureView默认以fitxy的方式加载surface数据&#xff0c;如果需要等比全屏播放视频&#xff0c;避免拉伸&#xff0c;可以采用Matrix对TextureView进行变换 废话不多说&#xff0c;直接上代码 public class BaseIjkPlayer implements TextureView.SurfaceTextureListener{/…...

【RS】GEE(Python):数据处理

在前面的章节中&#xff0c;我们已经学习了如何加载影像数据。现在&#xff0c;让我们进一步探讨如何在 Google Earth Engine (GEE) 中进行数据处理。数据处理通常包括图像预处理、裁剪、过滤、重采样等操作。 栅格影像的处理 栅格影像处理包括了裁剪、波段选择、重采样、合成…...

非线性磁链观测器推导

<div id"content_views" class"htmledit_views"><p id"main-toc"><strong>目录</strong></p> 电机方程 电压方程 磁链方程 定义状态变量和输出变量 非线性观测器方程 电角度的计算--锁相环 锁相环调参 电机…...

什么时机用mysql,什么时机用redis,什么时机用本地内存

mysql 的 buffer pool 也是存在内存中&#xff0c;redis 的数据也是存在内存中&#xff0c;为什么不直接存在 mysql 里&#xff1f; 1、数据结构和访问方式 Redis 是一个内存数据库&#xff0c;专门为高效的读写性能而设计。它支持多种数据结构&#xff08;如字符串、列表、哈…...

Redis八股

缓存 缓存穿透 当查询一个不存在的数据&#xff0c;mysql查询不到数据&#xff0c;无法写入缓存&#xff0c;导致每次都请求数据库 解决方法 缓存空数据&#xff0c;当查询结果未空&#xff0c;将结果进行缓存。 简单但是会消耗内存&#xff0c;而且会出现不一致情况。布隆…...

vue3--通用 popover 气泡卡片组件实现

背景 在日常开发中,我们一般都是利用一些诸如:element-ui、element-plus、ant-design等组件库去做我们的页面或者系统 这些对于一些后台管理系统来说是最好的选择,因为后台管理系统其实都是大同小异的,包括功能、布局结构等 但是对于前台项目,比如官网、门户网站这些 …...

Bluetooth Channel Sounding中关于CS Step及Phase Based Ranging相应Mode介绍

目录 BLE CS中Step定义 BLE CS中交互的数据包/波形格式 BLE CS中Step的不同Mode BLE CS中Step的执行过程 Mode0介绍 Mode0 步骤的作用 Mode0步骤的执行过程 Mode0步骤的执行时间 Mode0步骤的时间精度要求 Mode2介绍 Mode2步骤的作用和执行过程 Mode2步骤的执行时间 B…...

简易STL实现 | Queue 的实现

封装&#xff1a; std::queue 在底层容器的基础上 提供了封装。默认情况下&#xff0c;std::queue 使用 std::deque 作为其底层容器&#xff0c;但也可以配置为使用 std::list 或 其他符合要求的容器 时间复杂度&#xff1a; 入队和出队操作 通常是 常数时间复杂度&#xff08…...

【hot100-java】LRU 缓存

链表篇 灵神题解 class LRUCache {private static class Node{int key,value;Node prev,next;Node (int k,int v){keyk;valuev;}}private final int capacity;//哨兵节点private final Node dummynew Node(0,0);private final Map<Integer,Node> keyToNode new HashMap&l…...

Centos7安装ZLMediaKit

一 获取代码 git clone https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit git submodule update --init git submodule update --init 命令用于初始化和更新 Git 仓库中的子模块&#xff08;submodules&#xff09;。这个命令在 Git 仓库中包含对其他 Git 仓库作为依赖时…...

面试问我LLM中的RAG,咱就是说秒过!!!

前言 本篇文章涉及了 RAG 流程中的数据拆分、向量化、查询重写、查询路由等等&#xff0c;在做 RAG 的小伙伴一定知道这些技巧的重要性。推荐仔细阅读&#xff0c;建议收藏&#xff0c;多读几遍&#xff0c;好好实践。 本文是对检索增强生成&#xff08;Retrieval Augmented …...

python程序操作pdf

python代码进行多个图片合并为pdf&#xff1a; #python代码进行多个图片合并为pdf&#xff1a; from PIL import Image from fpdf import FPDF import osdef images_to_pdf(image_paths, output_pdf, quality85):"""将多个图片合并为一个PDF文件&#xff0c;并…...

【Python报错】ImportError: DLL load failed while importing _network: 找不到指定的模块。

【Python报错】ImportError: DLL load failed while importing _network: 找不到指定的模块。 问题描述报错原因解决方案参考 问题描述 此段Python代码&#xff08;在Conda环境下运行&#xff09;昨天还能运行&#xff0c;但在我手痒更新conda&#xff08;我有罪&#xff09;之…...

外包干了5天,技术明显退步

我是一名本科生&#xff0c;自2019年起&#xff0c;我便在南京某软件公司担任功能测试的工作。这份工作虽然稳定&#xff0c;但日复一日的重复性工作让我逐渐陷入了舒适区&#xff0c;失去了前进的动力。两年的时光匆匆流逝&#xff0c;我却在原地踏步&#xff0c;技术没有丝毫…...

Zotero中文文献管理终极指南:茉莉花插件一键解决三大痛点

Zotero中文文献管理终极指南&#xff1a;茉莉花插件一键解决三大痛点 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件&#xff0c;用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 如果你正在使…...

5分钟掌握Vue工作流设计器:workflow-bpmn-modeler终极指南

5分钟掌握Vue工作流设计器&#xff1a;workflow-bpmn-modeler终极指南 【免费下载链接】workflow-bpmn-modeler &#x1f525; flowable workflow designer based on vue and bpmn.io7.0 项目地址: https://gitcode.com/gh_mirrors/wo/workflow-bpmn-modeler 还在为复杂…...

如何用QtScrcpy实现跨平台Android设备高效投屏与控制

如何用QtScrcpy实现跨平台Android设备高效投屏与控制 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy 在数字化…...

【回归儿童本位,重构专业底色】学前教育行业的深度思辨与价值坚守(二)

吕坤阳亲笔二、行业高质量发展的核心&#xff1a;回归儿童&#xff0c;摒弃功利化教育随着学前教育普惠政策的推进&#xff0c;行业规范化程度不断提升&#xff0c;但功利化、形式化的教育倾向依然存在&#xff0c;成为高质量发展的阻碍。部分幼儿园为迎合家长“抢跑”需求&…...

Wan2.1 VAE与微信小程序开发结合:打造个人AI头像生成工具

Wan2.1 VAE与微信小程序开发结合&#xff1a;打造个人AI头像生成工具 你有没有想过&#xff0c;用一张自己的照片&#xff0c;就能快速生成几十种不同风格的艺术头像&#xff1f;无论是动漫风、油画感&#xff0c;还是赛博朋克&#xff0c;都能一键搞定。以前这可能需要专业的…...

OpenClaw开源项目深度体验:对比其与星图GPU平台Qwen3-14B-Int4-AWQ部署差异

OpenClaw开源项目深度体验&#xff1a;对比其与星图GPU平台Qwen3-14B-Int4-AWQ部署差异 1. 项目概览与核心功能 OpenClaw是近期备受关注的开源大模型项目&#xff0c;主打轻量化和易部署特性。它采用混合专家架构(MoE)&#xff0c;在保持模型性能的同时显著降低了计算资源需求…...

从MATLAB验证到FPGA上板:双频信号叠加的完整开发闭环实战

从MATLAB验证到FPGA上板&#xff1a;双频信号叠加的完整开发闭环实战 在数字信号处理领域&#xff0c;实现双频信号的精确叠加是一个常见但极具挑战性的任务。无论是通信系统中的载波调制&#xff0c;还是音频处理中的音效合成&#xff0c;都需要工程师能够准确地在硬件层面实现…...

告别Swagger注解污染:用smart-doc + Maven插件5分钟生成整洁API文档(SpringBoot实战)

零侵入API文档革命&#xff1a;smart-doc在SpringBoot项目中的极致实践 如果你曾经被Swagger注解污染代码所困扰&#xff0c;或是厌倦了在业务逻辑中嵌入大量文档相关注解&#xff0c;那么smart-doc可能会成为你API文档管理的新选择。作为一款基于源码解析的文档生成工具&#…...

颠覆原神体验:Snap Hutao智能助手如何重构你的游戏效率

颠覆原神体验&#xff1a;Snap Hutao智能助手如何重构你的游戏效率 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 &#x1f9f0; / Multifunctional Open-Source Genshin Impact Toolkit &#x1f9f0; 项目地址: https://gitcode.com/GitHub_Trending/sn/Snap.Hu…...

2026学生免费用AI编程神器全攻略——白嫖不要白不要,大学生快来

好的&#xff0c;上一章刚教你用GitHub武装自己&#xff0c;筑起技术护城河&#xff0c;但光会搬砖&#xff08;敲命令&#xff09;还不够&#xff0c;你得学会“开高达”——用AI编程助手把效率拉满。 2026年了&#xff0c;如果还纯靠手打for循环和查API文档&#xff0c;那你…...