GTKMM:在叠加层上移动日历(裁剪问题)
gtkmm: moving a calendar on an overlay (cropping issue)
使用 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;
}
修复:
用于覆盖项目放置;您必须使用边距进行精确放置;和 H对齐和 V对齐用于通用放置。
calendar->set_margin_top(30); // This will push the calendar 30 pixels(?) down from the top.
您也不需要手动设置分配大小;您可以改用set_size_request(width, height)
。
更多细节在这里:
叠加说明
设置边距
相关文章:
- 在Windows上用C++裁剪HBITMAP
- Azure Kinect 使用正文索引映射裁剪正文
- Gtkmm 会不断检查 Gtk::日历上的所选日期是否发生变化
- 从捕获的帧中裁剪三角形 - OpenCV 和 C++
- 裁剪并显示我从哈尔级联获得的图像
- 从编译时已知的日历日期创建"std::chrono::time_point"
- 从谷歌日历API获取错误请求
- 如何在不使用 std::tm 和 mktime() 的情况下为给定日历日期创建 chrono::time_point 对
- 多边形裁剪 - 一点点详细说明
- 如何在Mac OSX中获取真实的日历微秒时间(自1970年以来的纪元)?
- 是否可以为裁剪器路径提供浮动值
- 使用裁剪器库在线和多边形之间相交
- C++日历(无法获取变量的值以返回到主函数)
- 在旋转 cv::Mat 而不裁剪后,将 cv::RotatedRect 移动到相同的位置
- 为什么周一周一上午3点更新日历周的数字,但不是在午夜
- 日历时间,纳秒分辨率为纳秒纪元
- OpenGL 透视投影裁剪多边形与顶点在视锥体之外 = 错误的纹理映射?
- C++谷歌日历API
- 根据朱利安日历计算月份
- GTKMM:在叠加层上移动日历(裁剪问题)