首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gtkd addOnClicked/g_signal_connect失败

gtkd addOnClicked/g_signal_connect失败
EN

Stack Overflow用户
提问于 2014-05-27 03:46:59
回答 1查看 199关注 0票数 2

当按下按钮时,我希望设置一个加载函数"NewItem“的按钮。当我试图编译时,我会收到这样的消息:

代码语言:javascript
复制
./test.d:20: Error: function gtk.Button.Button.addOnClicked (void delegate(Button) dlg, 
GConnectFlags connectFlags = cast(GConnectFlags)0) is not callable using argument types 
(void function())
./test.d:20: Error: cannot implicitly convert expression (& NewItem) of type void 
function() to void delegate(Button)

在C下(我正在用D重写C程序),我只使用g_signal_connect(NewItem_button,"clicked",G_CALLBACK(NewItem),NULL);但是我相信我会在D中使用NewItem_button.addOnClicked(&NewItem);

我的代码是:

代码语言:javascript
复制
void NewItem()
{
    //Create a new window to add new items.
}

Grid config_menu()
{
    Button tax_button=new Button("Set Tax Rate");

    Button NewItem_button=new Button("New Menu Item");
    NewItem_button.addOnClicked(&NewItem);

    Grid admin_grid=new Grid();
    admin_grid.setColumnSpacing(6);
    admin_grid.setRowSpacing(3);

    admin_grid.attach(tax_button, 0,0,1,1);
    admin_grid.attach(NewItem_button, 1,0,1,1);

    return(admin_grid);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-30 05:57:24

addOnClicked需要一个void delegate(Button) dlg类型的参数,而您要为它提供一个void function()类型的参数。

委托和函数之间的区别在于委托也有上下文。您可以在这里阅读有关函数和委托的更多信息:http://ddili.org/ders/d.en/lambda.html

您还忽略了函数需要接受Button类型的参数。

要使示例工作,需要将函数转换为委托,您需要:

代码语言:javascript
复制
void NewItem(Button b) // your function needs to take a Button parameter
{
    //Create a new window to add new items.
}

Grid config_menu()
{
    Button tax_button=new Button("Set Tax Rate");

    Button NewItem_button=new Button("New Menu Item");
    NewItem_button.addOnClicked(toDelegate(&NewItem)); // convert the function to a delegate

    Grid admin_grid=new Grid();
    admin_grid.setColumnSpacing(6);
    admin_grid.setRowSpacing(3);

    admin_grid.attach(tax_button, 0,0,1,1);
    admin_grid.attach(NewItem_button, 1,0,1,1);

    return(admin_grid);
}

toDelegate的文档:functional.html#.toDelegate

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23880778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档