全,
当我继续学习如何将为GTK3构建的代码迁移到GTK4时,我继续遇到GTK3中的函数不再存在于GTK4中的实例。例如,我构建了一个小型测试程序,它使用带有图像的标准按钮来启动颜色选择器,而不是直接显示GTK颜色按钮。这是为了美学。我使用的方法是有一个GTK颜色按钮,这个按钮是不可见的,还有一个带有图像的标准按钮。在程序中,我将“按钮单击”信号连接到标准按钮上,以实现"on_buttoncolor_clicked“功能。下面是该函数中的简单代码,然后发出颜色按钮的“按钮单击”信号。
void on_buttoncolor_clicked (GtkButton *b)
{
gtk_button_clicked(GTK_BUTTON(button));
}当我移植这个程序并试图用GTK4库编译这个程序时,编译错误了,表明找不到这个函数。
为了解决这个问题,我尝试将一个图像附加到GTK颜色按钮上,但是单击该按钮时会产生虚假的错误。因此,我希望能够复制"gtk_button_clicked“函数。如对此有任何建议,将不胜感激。FYI,我附加了一个用户界面的GTK3版本的小图片。
致以敬意,
克雷格

发布于 2022-03-10 20:52:01
全,
我确实试图复制使用"g_signal_emit“函数将”按钮单击“信号发送到颜色按钮,但该信号在颜色按钮中是未知的。
在深入研究了彩色按钮小部件的源代码之后,我确定“按钮单击”信号确实会附加到作为"GtkColorButton“结构一部分的按钮元素上。因此,通过修改代码,我将"g_signal_emit“函数指向结构中的”按钮元素“。
首先,我克隆了"GtkColorButton“小部件的结构,它允许我访问该结构。
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“将颜色按钮引用到信号。
g_signal_connect_swapped (button "clicked",
G_CALLBACK (on_button_clicked), buttoncolor);接下来,我修改了信号发射函数,使其指向"GtkColorButton“小部件中的按钮元素。
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);
}这将导致在单击标准标签按钮时出现预期的颜色选择对话框,正如新附加的图像中所指出的那样。

有了这项决议,我相信这个问题是可以解决的。
致以敬意,
克雷格
https://stackoverflow.com/questions/71389489
复制相似问题