Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vala-Json用户界面-如何连接用户界面信号?_Json_User Interface_Vala_Clutter - Fatal编程技术网

Vala-Json用户界面-如何连接用户界面信号?

Vala-Json用户界面-如何连接用户界面信号?,json,user-interface,vala,clutter,Json,User Interface,Vala,Clutter,我正在尝试将基于JSON的UI文件用于混乱。我想把UI文件中的信号连接到Vala代码 我尝试过类似的方法,它加载UI但不连接信号 如何连接UI文件中的信号?谢谢 这是我的主要观点。瓦拉: 使用杂波; 类UIDemo{ 公共UIDemo() { var ui_json=新脚本(); ui_json.load_from_文件(“ui.json”); ui_json.connect_信号(此); Stage Stage=(Stage)ui_json.get_对象(“主Stage”); stage.s

我正在尝试将基于JSON的UI文件用于混乱。我想把UI文件中的信号连接到Vala代码

我尝试过类似的方法,它加载UI但不连接信号

如何连接UI文件中的信号?谢谢


这是我的主要观点。瓦拉:

使用杂波;
类UIDemo{
公共UIDemo()
{
var ui_json=新脚本();
ui_json.load_from_文件(“ui.json”);
ui_json.connect_信号(此);
Stage Stage=(Stage)ui_json.get_对象(“主Stage”);
stage.show();
}
已激活()上的受保护的空
{
打印标准(“激活”);
}
}
void main(字符串[]args)
{
杂波.init(参考参数);
var app=new UIDemo();
main();
}
以下是ui.json:

{
    "id": "main-stage",
    "type": "ClutterStage",
    "color": "white",
    "width": 800,
    "height": 600,
    "title": "Script demo",
    "children": [{
        "id": "hello-label",
        "type": "ClutterText",
        "x": 400,
        "y": 300,
        "text": "Hello, world!",
        "color": "black",
        "font-name": "Sans 48px"
    }],
    "signals": [
    {
        "name": "destroy",
        "handler": "clutter_main_quit"
    },
    {
        "name": "activate",
        "handler": "onActivated"
    }]
}

有两件事可以让它工作:

  • 将ClutterScript中的处理程序名称与Vala生成的名称匹配
  • 将处理程序名称导出到二进制文件的动态符号表中
  • 还有第三件事,当程序运行时,示例不会在
    stdout
    上打印,但是
    stderr
    会打印

    ui.json
    中,我更改了:

        {
            "name": "activate",
            "handler": "onActivated"
        }
    

    Vala生成的C中的名称包括类名。也可以通过查看C代码找到它。使用
    --ccode
    开关和
    valac
    生成C文件

    此符号还需要出现在二进制文件的动态符号表中。应将advises
    -export dynamic
    传递给链接器。这是由C编译器完成的,可以使用
    -X-export dynamic
    valac
    将此开关传递给C编译器:

    valac --pkg clutter-1.0 -X -export-dynamic main.vala
    
    您可以读取二进制文件中可用的动态符号。对于生成ELF二进制文件的平台,如Linux,请使用
    readelf--dyn syms main
    ,其中
    main
    是生成的二进制文件的名称<代码>ui_demo_on activated将在该列表中

    valac --pkg clutter-1.0 -X -export-dynamic main.vala