c++ - GTK 3 如何将一个信号连接到多个小部件?

标签 c++ forms signals gtk3

我需要使用以下代码创建的模型创建一个表单,该表单由一个带有两个文本条目和一个按钮的窗口组成。

我需要在条目中放置一些文本,当按下按钮时,将两个条目中获得的文本放入数组中,(或同时打印它们,或同时对两者进行任何操作)

用于创建窗口的代码如下:

#include <iostream>
#include <gtk/gtk.h>
using namespace std;

GtkWidget *wventana;
GtkWidget *wgrid;

void ventana(string titulo, int margen)
{
    const char * tituloc = titulo.c_str();
    wventana = gtk_window_new (GTK_WINDOW_TOPLEVEL);
}

void grid()
{
    wgrid = gtk_grid_new();
    gtk_container_add(GTK_CONTAINER(wventana), wgrid);
}

void boton(string texto, int x, int y, int lx, int ly)
{
    const char * wtexto = texto.c_str();

    GtkWidget *wboton;
    wboton = gtk_button_new_with_label (wtexto);
    gtk_grid_attach (GTK_GRID (wgrid), wboton, x, y, lx, ly);
}

void entrada(int x, int y, int lx, int ly)
{
    GtkWidget *wentrada;
    wentrada = gtk_entry_new();
    gtk_grid_attach (GTK_GRID (wgrid), wentrada, x, y, lx, ly);
}

//INICIO
int main(int argc, char *argv[])
{
    gtk_init (&argc, &argv);

    ventana("ventana",10);
    grid();
    entrada(2, 1, 1, 1);
    entrada(2, 2, 1, 1);
    boton("Procesar", 2, 3, 1, 1);

    gtk_widget_show_all (wventana);
    gtk_main ();

    return 0;
}

拜托,有人能解释一下这是怎么做到的吗(不是必须使用提供的代码,它仅供引用所需的结果)

最佳答案

最好的方法是创建一个结构,将其作为 user_data 传递给信号处理程序:

typedef struct {
    GtkWidget *entrada1, *entrada2;
} Widgets;

...

// in main():
Widgets *w = g_slice_new0 (Widgets);
w->entrada1 = entrada (2, 1, 1, 1); // remember to return the widget from entrada()!
w->entrada2 = entrada (2, 2, 1, 1);
GtkWidget *procesar = boton ("Procesar", 2, 3, 1, 1);
g_signal_connect(procesar, "clicked", G_CALLBACK (on_procesar), w);
// ...
gtk_main ();
g_slice_free (Widgets, w);

...

void
on_procesar (GtkButton *procesar, Widgets *w)
{
    // do something with w->entrada1 and w->entrada2
}

关于c++ - GTK 3 如何将一个信号连接到多个小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25799350/

相关文章:

c++ - 在 HP-UX、Solaris 或 AIX 上是否有任何 getifaddrs() 替代方案?

c++ - 使用 boost::asio::ip::tcp::iostream 的低带宽性能

html - 在 Web 应用程序中更改 css 文件

javascript - jQuery - 通过单击包含 div 来提交按钮

python - 在 Python 线程中处理信号

c - sigwait 的奇怪行为

c++ - WebView 未显示在 NSWindow 中

javascript - 如何在没有输入的情况下通过自定义控件以 Angular 形式触发 change()

python - 从回调发出信号时,Python应用程序崩溃

c++ - 不分配任何 char 内存的 const 字符串构造函数?