GTK3.0 GtkOverlay 控件覆盖

网上关于GtkOverlay的知识很少,下面这段代码就是用GtkOverlay实现控件布局的覆盖。
#include <gtk/gtk.h>  
void gtk_overlay_set_overlay_pass_through (GtkOverlay *overlay, GtkWidget *widget, gboolean pass_through)
{
    	g_return_if_fail (GTK_IS_OVERLAY (overlay));
	g_return_if_fail (GTK_IS_WIDGET (widget));
	gtk_container_child_set (GTK_CONTAINER (overlay), widget,
	"pass-through", pass_through,
	NULL);
}
	
static void activate (GtkApplication *app , gpointer data)  
{  
    	GtkWidget *win;  
	
	GtkWidget *overlay; 
	win = gtk_application_window_new(app);  
	
	gtk_window_set_title(GTK_WINDOW(win) , " My test");  
	gtk_window_set_default_size(GTK_WINDOW(win) , 500 , 510);  
	gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER);  

	overlay = gtk_overlay_new ();
	GtkWidget *image = NULL;
	image = gtk_image_new_from_file ("timg.png");
	
	GtkWidget *image_background = NULL;
	image_background = gtk_image_new_from_file ("../gtk/timg.png");
    	gtk_container_add(GTK_CONTAINER(overlay), image_background);
	gtk_overlay_add_overlay (GTK_OVERLAY (overlay), image);
	
	//gtk_overlay_set_overlay_pass_through(GTK_OVERLAY (overlay), label, TRUE);

	gtk_container_add (GTK_CONTAINER (win), overlay);
	

	gtk_widget_show_all(win);  
}  
  
int main(int argc , char **argv)  
{  
	GtkApplication *app;  
	int app_status;  
	app = gtk_application_new("org.gtk.exmple" , G_APPLICATION_FLAGS_NONE);  
	g_signal_connect(app , "activate" , G_CALLBACK(activate) , NULL);  
	app_status = g_application_run(G_APPLICATION(app) , argc , argv);  
	g_object_unref(app);  	
	return app_status;  
}  

在做button和label的时候gtk_overlay_set_overlay_pass_through的功能实现不了,表示不明白。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要显示USB相机图像,需要使用图形库和相机驱动程序。在GTK3.0中,可以使用GStreamer框架来显示相机图像。 以下是显示USB相机图像的步骤: 1. 安装GStreamer框架和相机驱动程序。 2. 使用GStreamer框架创建一个pipeline,将相机视频流连接到一个视频显示器。 3. 在GTK窗口中嵌入视频显示器,以显示相机图像。 下面是一个简单的示例程序,演示如何在GTK窗口中显示USB相机图像: ```python import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk, GdkX11, Gst class CameraViewer(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Camera Viewer") # Initialize GStreamer Gst.init(None) # Create a pipeline to display the camera video self.pipeline = Gst.Pipeline() self.bus = self.pipeline.get_bus() self.bus.add_signal_watch() self.bus.connect("message::error", self.on_error) src = Gst.ElementFactory.make("v4l2src", "source") src.set_property("device", "/dev/video0") caps = Gst.Caps.from_string("video/x-raw,width=640,height=480") filter = Gst.ElementFactory.make("capsfilter", "filter") filter.set_property("caps", caps) sink = Gst.ElementFactory.make("xvimagesink", "sink") self.pipeline.add(src) self.pipeline.add(filter) self.pipeline.add(sink) src.link(filter) filter.link(sink) # Create a video widget to display the camera video self.video_widget = Gtk.DrawingArea() self.video_widget.set_double_buffered(True) # Embed the video widget in the window self.add(self.video_widget) # Connect the video widget to the pipeline self.video_widget.realize() window_id = self.video_widget.get_window().get_xid() sink.set_window_handle(window_id) def on_error(self, bus, message): error = message.parse_error() print("Error: %s" % error[1]) win = CameraViewer() win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() ``` 这个程序使用v4l2src元素从/dev/video0设备读取视频流,使用capsfilter元素将视频流的分辨率设置为640x480,使用xvimagesink元素在GTK窗口中显示视频流。视频显示器嵌入在GTK窗口中,通过连接到视频显示器的X11窗口句柄来显示视频流。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值