【问题标题】:Gtkmm-3.0 and Cairomm, transparent window not workingGtkmm-3.0 和 Cairomm,透明窗口不起作用
【发布时间】:2015-10-20 04:22:27
【问题描述】:

在过去的一个小时里,我一直在努力完成这项工作。 想法 es Dock 是一个类,其基础是 Gtk::Window,并且在发出 signal_draw() 时,CairoMM 应该将给定的上下文绘制为透明的。相反,我看到一个黑色的窗口。 代码如下:

Dock::Dock() : Gtk::Window()
{
    set_decorated(false);
    set_default_size(200,200);  
    set_app_paintable(true);
    signal_draw().connect(sigc::mem_fun(*this,&Dock::dibujar));

}

bool Dock::dibujar(const Cairo::RefPtr<Cairo::Context>& contexto)
{

    contexto->set_source_rgba(1.0,1.0,1.0,0.0);
    contexto->set_operator(Cairo::OPERATOR_SOURCE);
    contexto->paint();
    return false;
}

难道不应该让窗口透明就够了吗?

【问题讨论】:

    标签: c++ gtkmm


    【解决方案1】:

    您的绘图处理程序无法访问有关应在窗口上绘制的其他内容的信息,因此您的 paint() 调用在我猜默认情况下黑色背景的上方绘制了一个透明层。

    幸运的是,有一种方法可以实现您想要的:Gtk::Widget::set_opacity()

    【讨论】:

    • 但是如果我在父小部件上使用它,子小部件将无法具有不同(更大)的不透明度,对吧?有没有办法让子小部件具有不同的 alpha 级别?
    • 你的意思是你只想有一个窗口,里面有普通的小部件,但是你可以通过它看到桌面背景?
    • 确实如此
    • 试试this。它似乎与您已经在做的非常相似。也许您需要gdk_cairo_create() 步骤,我相信它会转化为Gdk::Window::create_cairo_context()
    猜你喜欢
    • 1970-01-01
    • 2019-04-24
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2010-11-20
    • 1970-01-01
    相关资源
    最近更新 更多