GTK 3如何将一个信号连接到多个小部件? (第2部分)

时间:2014-09-19 21:44:52

标签: c++ forms signals gtk3

这是此问题的延续:GTK 3 How to connect one signal to multiple widgets?

我使用GTK3在C ++中有一些代码。

它创建了两个文本条目和一个按钮。我想要按下按钮时输入的文本操作。 (在这种情况下,我只想要打印文本。)代码如下:

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

GtkWidget *wventana;
GtkWidget *wgrid;

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

void on_procesar (GtkButton *procesar, Widgets *w)
{
    const char * texto = gtk_entry_get_text(entrada1);
    cout << texto << endl;
}

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);
}

GtkWidget *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);
    return wboton;
}

GtkWidget *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);
    return wentrada;
}

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

    ventana("ventana",10);
    grid();

    Widgets *w = g_slice_new (Widgets);
    w->entrada1 = entrada (2, 1, 1, 1);
    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_widget_show_all (wventana);
    gtk_main ();
    g_slice_free (Widgets, w);

    return 0;
}

现在我的问题在于on_procesar(),我不知道如何从条目中获取文本,因为我不知道如何指出我想要使用的条目小部件。 (未在范围内定义)。

任何人都可以解释一下如何做到这一点?

1 个答案:

答案 0 :(得分:0)

w->entrada1处理程序中使用on_procesar()而不是entrada1。结构w的要点是跟踪要在各种信号处理程序中使用的所有小部件,以便通过将w作为用户数据传递给每个小部件来保持它们的范围。处理程序。