Gtk2 Получить данные из 2-х записей одной и той же кнопкой

Итак, я новичок в gtk, и я пытаюсь создать форму входа, и мне нужно, чтобы имя пользователя и пароль были отправлены при нажатии кнопки «Отправить». Как я могу это сделать? Мой код:

const void button_clicked (GtkWidget *widget,gpointer data)
{
    const gchar* text;
    text = gtk_entry_get_text(GTK_ENTRY(data));
    write(lala,text,100);
}
GtkWidget*window,*label_username,*label_password,*layout,*entry_username,*entry_password,*submit_button;
entry_username = gtk_entry_new();
entry_password = gtk_entry_new();
submit_button = gtk_button_new_with_label("Sumbit");
g_signal_connect(submit_button,"clicked",G_CALLBACK(button_clicked),entry_username;

Как я могу заставить функцию submit_button получать текст от entry_username и entry_password? Спасибо!


person Iustin Vlad    schedule 18.12.2018    source источник
comment
Вы можете создать структуру с указателями на эти записи и передать указатель на эту структуру как data   -  person Alexander Dmitriev    schedule 18.12.2018
comment
Если вы новичок в GTK+, не используйте GTK+ 2, который уже устарел. GTK+ 3 был выпущен в 2011 году и на данный момент является стабильной версией. GTK+ 4, вероятно, выйдет в 2019 году.   -  person liberforce    schedule 18.12.2018


Ответы (1)


В gtk для таких ситуаций было бы лучше передать структуру, которая содержит виджеты в качестве членов функции обратного вызова...

typedef struct MainWindow 
{

GtkWidget *entry_username, *entry_password;

}MAINWINDOW;

int main(
MAINWINDOW *mainwindow = malloc(sizeof(MAINWINDOW));

mainwindow->entry_username = gtk_entry_new();
mainwindow->entry_password = gtk_entry_new();


g_signal_connect(submit_button,"clicked",G_CALLBACK(button_clicked),mainwindow);
}

const void button_clicked (GtkWidget *widget,gpointer data)
{
    MAINWINDOW *mainwindow = data;
    //now you have both the widget's 
        // modify em as per your wish :)
}

это очень грубый пример. но что-то вроде этого должно работать для вашего случая.

person Siva Guru    schedule 19.12.2018