GTK Вход в целочисленное преобразование

Как вы получаете текст из виджета gtk entry, а затем конвертируете его в целочисленное значение. Обратите внимание, что в моем коде я включаю структуру-оболочку под названием Window, которая содержит указатели на виджеты. В основном я объявляю экземпляр Window, а затем создаю правильные виджеты с соответствующими вызовами функций GTK. Затем я передаю этот объект окна в функцию, которая обрабатывает действие, на которое нажали. Я хочу затем рассчитать числитель, деленный на знаменатель в целочисленном формате. Ниже моя попытка. Весь код работает, кроме функции button_clicked. Есть идеи?

#include <gtk/gtk.h>
#include <stdlib.h>

struct Window
{
GtkWidget *numerator;
GtkWidget *denominator;
GtkWidget *button;
GtkWidget *label;
};void button_clicked(GtkWidget *widget, gpointer data)
{
Window* w = (Window*)data;
char buf[10];

char buffer[200];

GtkEntry* e = (GtkEntry*)w->numerator;
const gchar* entry1 = gtk_entry_get_text(e);

char* test = (char*)gchar;
int r = atoi(test);sprintf(buf,"%d",r);

GtkWidget *label = w->label;
gtk_label_set_text(GTK_LABEL(label), buf);
}int main(int argc, char*argv[])
{
GtkWidget *window;
GtkWidget *table;
Window w;//Set up my window
gtk_init(&argc,&argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Division");
gtk_window_set_default_size(GTK_WINDOW(window),500,500);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

//Create my table and add it to the window
table = gtk_table_new(4,2,FALSE);
gtk_container_add(GTK_CONTAINER(window),table);

//Create instances of all my widgets
w.numerator = gtk_entry_new();
w.denominator = gtk_entry_new();
w.button = gtk_button_new_with_label("Click");
w.label = gtk_label_new("result");

//Attack the widgets to the table
gtk_table_attach(GTK_TABLE(table), w.numerator,0,1,0,1,GTK_FILL,GTK_FILL,5,5);
gtk_table_attach(GTK_TABLE(table), w.denominator,0,1,1,2,GTK_FILL,GTK_FILL,5,5);
gtk_table_attach(GTK_TABLE(table), w.button,0,1,2,3,GTK_FILL,GTK_FILL,5,5);
gtk_table_attach(GTK_TABLE(table), w.label,0,1,3,4,GTK_FILL,GTK_FILL,5,5);

//attach the click action to with the button to invoke the button_clicked function
g_signal_connect(G_OBJECT(w.button),"clicked",G_CALLBACK(button_clicked),&w);
g_signal_connect_swapped(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);

gtk_widget_show_all(window);gtk_main();

return 0;
}

-2

Решение

Если я вижу это правильно, в вашем «тестовом коде» все, что вы пытаетесь сделать, это установить строку метки в содержимое «w-> Numberrator», верно?

Линия

char* test = (char*)gchar;

выглядит подозрительно для меня и даже не компилируется, похоже на опечатку.
Измените «gchar» на «entry1», и он должен делать то, что вы хотите.

У меня есть для вас рекомендация: используйте GtkSpinButton вместо GtkEntry. Это похоже на пользовательскую запись, созданную для числовых значений, и ее поиск во много раз проще.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]