这是我第一次使用pangomm,并且尝试将一些文本呈现到Cairo :: Context,但是当我尝试从Pango :: Layout对象访问任何内容时,程序将引发以下错误:
(process:7175): glibmm-CRITICAL **: 15:36:58.578: Glib::ObjectBase* Glib::wrap_create_new_wrapper(GObject*): assertion 'wrap_func_table != nullptr' failed
(process:7175): glibmm-WARNING **: 15:36:58.578: Failed to wrap object of type 'PangoLayout'. Hint: this error is commonlycaused by failing to call a library init() function.
[1] 7175 segmentation fault ./a.out
我无法使用gdb追溯错误。
代码
#include <cairomm/cairomm.h>
#include <pangomm.h>
int main() {
auto surf = Cairo::ImageSurface::create(Cairo::Format::FORMAT_ARGB32, 1920, 20);
auto cr = Cairo::Context::create(surf);
cr->set_source_rgb(0.0, 0.0, 0.0);
cr->paint();
cr->move_to(0.0, 0.0);
cr->set_source_rgb(1.0, 1.0, 1.0);
auto layout = Pango::Layout::create(cr);
auto font = Glib::ustring("Sans Bold 27");
Pango::FontDescription desc(font);
layout->set_font_description(desc);
auto text = Glib::ustring("Oi");
layout->set_text(text);
layout->show_in_cairo_context(cr);
surf->write_to_png("test.png");
return 0;
}
编译命令
g++ -g -Wall `pkg-config --cflags cairomm-1.0 pangomm-1.4` main.cpp `pkg-config --libs cairomm-1.0 pangomm-1.4`
答案 0 :(得分:1)
由于在没有Gtk的情况下使用LinkedList<Float> times = new LinkedList<>();
//...
while (paymentCarQueue.carsInQueue()>0 && i < Car.getPaymentSpeed()){
// ...
float timeInFloat = car.getTotalMinutes();
if (times.size() == MAX_TIMES-1) { times.removeFirst()};
times.addLast(timeInFloat);
}
,因此需要在程序开始时初始化pangomm
。这也初始化了Glib。呼叫pangomm
并加入Pango::init();
。
因此您的代码变为
<pangomm/init.h>