gtkmm 信号函数必须返回“int”?

问题描述 投票:0回答:0

我正在编写一个应该显示 Sierpinski 三角形的程序。为此,我首先为 cairo 创建了一个演示,因为我以前从未使用过 cairo;它只创建一行:

#include <glibmm.h>
#include <gtkmm.h>

Gtk::Window* W_Main;
Gtk::DrawingArea* D_Triangle;
Gtk::Button* B_Draw;
Gtk::Adjustment* A_Depth;

int on_D_Triangle_draw(const Cairo::RefPtr<Cairo::Context> cr) {
    cr->set_source_rgb(0.0, 0.0, 0.0);
    cr->set_line_width(4.0);
    cr->move_to(0, 0);
    cr->line_to(30, 30);
    cr->stroke();
    return 0;
}

int main(int argc, char** argv) {
    auto app = Gtk::Application::create(argc, argv, "org.CENSORED.sierpinski");
    
    auto builder = Gtk::Builder::create_from_file("sierpinski.glade");
    
    builder->get_widget("W_Main", W_Main);
    builder->get_widget("D_Triangle", D_Triangle);
    builder->get_widget("B_Draw", B_Draw);
    builder->get_widget("A_Depth", A_Depth);
    
    D_Triangle->signal_draw().connect(sigc::ptr_fun(on_D_Triangle_draw));
    
    app->run(*W_Main);
}

奇怪的是:显然,“on_D_Triangle_draw”函数必须返回一个整数!我首先尝试将其设为 void 函数,但随后编译器返回了一条完全无法理解的错误消息。

有人能给我解释一下这是怎么回事吗?此外,

0
是正确的返回值(在“最佳实践”的意义上)吗?

c++ cairo glade gtkmm3
© www.soinside.com 2019 - 2024. All rights reserved.