首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在gtk_button_click中复制GTK4函数

如何在gtk_button_click中复制GTK4函数
EN

Stack Overflow用户
提问于 2022-03-08 02:50:07
回答 1查看 189关注 0票数 0

全,

当我继续学习如何将为GTK3构建的代码迁移到GTK4时,我继续遇到GTK3中的函数不再存在于GTK4中的实例。例如,我构建了一个小型测试程序,它使用带有图像的标准按钮来启动颜色选择器,而不是直接显示GTK颜色按钮。这是为了美学。我使用的方法是有一个GTK颜色按钮,这个按钮是不可见的,还有一个带有图像的标准按钮。在程序中,我将“按钮单击”信号连接到标准按钮上,以实现"on_buttoncolor_clicked“功能。下面是该函数中的简单代码,然后发出颜色按钮的“按钮单击”信号。

代码语言:javascript
复制
void on_buttoncolor_clicked (GtkButton *b)
{
    gtk_button_clicked(GTK_BUTTON(button));
}

当我移植这个程序并试图用GTK4库编译这个程序时,编译错误了,表明找不到这个函数。

为了解决这个问题,我尝试将一个图像附加到GTK颜色按钮上,但是单击该按钮时会产生虚假的错误。因此,我希望能够复制"gtk_button_clicked“函数。如对此有任何建议,将不胜感激。FYI,我附加了一个用户界面的GTK3版本的小图片。

致以敬意,

克雷格

EN

回答 1

Stack Overflow用户

发布于 2022-03-10 20:52:01

全,

我确实试图复制使用"g_signal_emit“函数将”按钮单击“信号发送到颜色按钮,但该信号在颜色按钮中是未知的。

在深入研究了彩色按钮小部件的源代码之后,我确定“按钮单击”信号确实会附加到作为"GtkColorButton“结构一部分的按钮元素上。因此,通过修改代码,我将"g_signal_emit“函数指向结构中的”按钮元素“。

首先,我克隆了"GtkColorButton“小部件的结构,它允许我访问该结构。

代码语言:javascript
复制
struct _GtkColorButton {
GtkWidget parent_instance;

GtkWidget *button;

GtkWidget *swatch;
GtkWidget *cs_dialog;

char *title;
GdkRGBA rgba;

guint use_alpha   : 1;
guint show_editor : 1;
guint modal       : 1;
};

然后,我修改了信号连接,使用"g_signal_connect_swapped“将颜色按钮引用到信号。

代码语言:javascript
复制
g_signal_connect_swapped (button "clicked",
G_CALLBACK (on_button_clicked), buttoncolor);

接下来,我修改了信号发射函数,使其指向"GtkColorButton“小部件中的按钮元素。

代码语言:javascript
复制
void on_button_clicked (GtkColorButton *b)
{
g_signal_emit (b->button, 
g_signal_lookup ("clicked", G_OBJECT_CLASS_TYPE 
(GTK_WIDGET_GET_CLASS(GTK_BUTTON(button)))), 0);
}

这将导致在单击标准标签按钮时出现预期的颜色选择对话框,正如新附加的图像中所指出的那样。

有了这项决议,我相信这个问题是可以解决的。

致以敬意,

克雷格

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

https://stackoverflow.com/questions/71389489

复制
相关文章

相似问题

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