gpt4 book ai didi

c++ - gtkmm:在叠加层上移动日历(裁剪问题)

转载 作者:太空宇宙 更新时间:2023-11-04 13:41:04 25 4
gpt4 key购买 nike

使用 Ubuntu 14.04 和 libgtkmm-3.0-dev

我有一个位于覆盖容器上的日历小部件。在不做任何更改的情况下,日历将出现在叠加层的左上角。我想稍微向下移动日历,但底部一直被切断。

请参阅下面的一些示例代码来演示该问题。如果你改变“newAlloc.set_y(30);”到“newAlloc.set_y(0);”,不会有裁剪问题,但日历当然会回到顶部。

#include <gtk/gtk.h>
#include <gtkmm.h>
#include <iostream>

void CalendarSizeAllocate(Gtk::Allocation alloc, Gtk::Calendar * cal)
{
Gtk::Allocation newAlloc = alloc;
newAlloc.set_y(30);
cal->set_allocation(newAlloc);
}

int main(int argc, char *argv[])
{
Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.gtkmm.example");

Gtk::Window window;
window.set_default_size(300, 300);

GtkWidget * Overlay = gtk_overlay_new();
window.add(*Glib::wrap(Overlay));

Gtk::Box box;
gtk_container_add(GTK_CONTAINER(Overlay), GTK_WIDGET(box.gobj()));

Gtk::Calendar * calendar = new Gtk::Calendar();
calendar->set_valign(Gtk::ALIGN_START);
calendar->signal_size_allocate().connect(sigc::bind<Gtk::Calendar*>(sigc::ptr_fun(&CalendarSizeAllocate), calendar));
gtk_overlay_add_overlay(GTK_OVERLAY(Overlay), GTK_WIDGET(calendar->gobj()));

window.show_all();
app->run(window);

return 0;
}

最佳答案

修复:

用于叠加项放置;您必须使用边距进行精确放置;和HAlign 和VAlign 用于通用放置。

calendar->set_margin_top(30); // This will push the calendar 30 pixels(?) down from the top.

您也不需要手动设置分配大小;您可以改用 set_size_request(width, height)

此处有更多详细信息:

Overlay Description

Set Margin

关于c++ - gtkmm:在叠加层上移动日历(裁剪问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27615003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com