Форум программистов, компьютерный форум, киберфорум
Кроссплатфор­менная разработка
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/50: Рейтинг темы: голосов - 50, средняя оценка - 4.82
15 / 14 / 4
Регистрация: 20.05.2011
Сообщений: 296
Записей в блоге: 2

Вывод текста в textview

09.02.2012, 19:56. Показов 10432. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите разобраться с textview вот код, по замыслу при нажатии кнопки Hello должен выйти текст в textview но функция не работает
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <gtk/gtk.h>
#include "gtk_test.h"
#include <stdio.h>
 
 
int main(int argc, char *argv[])
{
    GtkWidget *window;
    GtkWidget *button,*button2;
    GtkWidget *textview;
    GtkWidget *vbox;
    
 
    complex_t x = {1,2};
        complex_t y = {3,4};
        complex_t z = mul(x,y);
    printf ("z = (%lf, %lf)\n", z.a, z.b );
    
  gtk_init (&argc, &argv);
 
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
    g_signal_connect(G_OBJECT(window), "destroy",
            G_CALLBACK (destroy), NULL);
 
    button = gtk_button_new_with_label("Quit!");
    button2 = gtk_button_new_with_label("hello");
 
    g_signal_connect(G_OBJECT(button2), "clicked",
            G_CALLBACK (gtktextview),NULL);
    g_signal_connect(G_OBJECT(button), "clicked",
            G_CALLBACK (destroy),G_OBJECT(window));
    vbox = gtk_vbox_new(FALSE, 0);
 
    textview = gtk_text_view_new ();
    
 
    
    gtk_container_add(GTK_CONTAINER (window), vbox);
    gtk_container_add(GTK_CONTAINER (vbox), textview);
    gtk_container_add(GTK_CONTAINER (vbox), button2);
    gtk_container_add(GTK_CONTAINER (vbox), button);
    gtk_widget_show (textview);
    gtk_widget_show(button);
    gtk_widget_show(button2);
    gtk_widget_show(vbox);
    gtk_widget_show(window);
 
    gtk_main();
 
    return 0;
}
}
вот функция
C
1
2
3
4
5
6
7
void gtktextview(GtkWidget *widget,GtkWidget *textview)
{
GtkTextBuffer *buffer;
  buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));      
  gtk_text_buffer_set_text (buffer,"Привет, это какой-то текст", -1);
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.02.2012, 19:56
Ответы с готовыми решениями:

Вывод 2 ресурсных текста в TextView с использованием java кода
Хочу произвести простое действие, поменять текст, взять его из ресурсов R.string, но при этом использовать сразу 2 ресурса: ...

Выделение текста в TextView
При выделении текста в TextView android:textIsSelectable=&quot;true&quot; на моем устройстве(HTC ONE X Android 4.2.2) появляется всплывающее меню,...

TextView авторазмер текста
android studio Textview имеет размеры 100% на 50%, заполняя половину экрана. В нем написано число, которое изменяется по нажатию на...

33
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
03.03.2012, 22:17
Студворк — интернет-сервис помощи студентам
УМВР - нижняя часть функции. последние две функции закоментил, так как не знаю полностью кода и к теме он не относится.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void gtktextview(GtkWidget *widget,  gpointer user_data)
{
    //~ gpointer buffer=user_data; // - это необязательно, к тому же неправильно
    gchar *entry_text;
    gchar *some_text="Привет, это какой-то текст";
    entry_text = gtk_entry_get_text( GTK_ENTRY(entry) );
 
    //~ GTK_BUTTON(widget) и (GtkButton *)widget - одно и тоже
    gtk_button_set_label(GTK_BUTTON(widget), user_data);
    gtk_entry_set_text((GtkEntry *)entry, entry_text);
    gtk_text_buffer_set_text (buffer, some_text, -1);
 
    gchar *text1;
    int a1;
    int entry_int;
 
    text1 = gtk_entry_get_text(GTK_ENTRY(entry));
    entry_int = atoi(text1); 
    a1 = entry_int+12;
    g_print("%i", a1);
    //~ sprintf(screen, "%li\0", a1);
    //~ gtk_label_set_text(GTK_LABEL(label1), a1);
 
 
}
на картинке вывод g_print, т.е. в entry я ввел 11, в терминале результат, переменная a1 - 23. как видишь, все работает.
в чем выражена твоя ошибка? может ты забыл определить text1?
C
1
gchar *text1;
Миниатюры
Вывод текста в textview  
0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
03.03.2012, 22:51
понял:
gtk_label_set_text(GTK_LABEL(label1), a1);
ты передаешь в качестве аргумента число (тип int) а надо - указатель на строку, то есть тебе надо a1 перевести в какую-то "строку" (char ).
C
1
2
3
4
5
6
7
8
9
10
11
12
    gchar *text1;
    int a1;
    int entry_int;
    gchar screen[20];
 
    text1 = gtk_entry_get_text(GTK_ENTRY(entry));
    entry_int = g_atoi(text1); 
    a1 = entry_int+12;
    g_sprintf(screen, "%li\0", a1);
    g_print("%s", screen);
 
    gtk_text_buffer_set_text (buffer, screen, -1);
1
15 / 14 / 4
Регистрация: 20.05.2011
Сообщений: 296
Записей в блоге: 2
07.03.2012, 21:47  [ТС]
спасибо, с буфером разобрался, а с label не как не получается все вроде так же делаю а при выполнении функции программа закрывается
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 void perevod(GtkWidget *widget,  gpointer user_data)
{
    gchar *text1;
    int a1;
    int entry_int;
    char screen;
    text1 = gtk_entry_get_text(GTK_ENTRY(entry1));
    g_print(text1);
    entry_int = atoi(text1);
    a1 = entry_int+16;
    g_sprintf(screen, "%li\0", a1); // вот эти строчки зачем то не работают
    g_print(screen);// соответственно сюда в screen нечего не присваевается и программа закрывается
    gtk_label_set_text(GTK_LABEL(label1), screen);//
}
я так и не понял зачем так происходит
0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
08.03.2012, 21:08
элементарно, ватсон ))
у тебя в коде: строка 6
Цитата Сообщение от maximus1991 Посмотреть сообщение
char screen;
это переменная, которая содержит символ, а надо символьный массив:
C
1
gchar screen[20];
Добавлено через 2 часа 6 минут
C
1
g_sprintf(screen, "%li\0", a1);
заключительный \0 не обязателен
1
15 / 14 / 4
Регистрация: 20.05.2011
Сообщений: 296
Записей в блоге: 2
16.03.2012, 20:57  [ТС]
Большое спасибо за помощь в изучении си и GTK , не можешь обьяснить почему при вводе в entry1 число 0,3 выводиться во такое 209715,000000
вот код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void perevod(GtkWidget *widget,  gpointer user_data)
{
    gchar *text1;
    double a1;
    double entry_int;
    char screen[20];
    text1 = gtk_entry_get_text(GTK_ENTRY(entry1));
    
    entry_int = atof(text1);
    a1 = entry_int;
    g_sprintf(screen,"%f", a1);
 
    gtk_entry_set_text((GtkEntry *)entry2,screen);
    g_print(screen);
    gtk_label_set_text(GTK_LABEL(label1), screen);
}
0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
17.03.2012, 19:10
maximus1991, если по-быстрому, то в 0,3 в программировании должно быть 0.3
подробней - посмотрю позже.
но легче попросить пользователя просто вводить в виде 0.3
как вариант - поставить "Крутящуюся кнопку" (GtkSpinButton) - ее еще называют "карусель".
1
15 / 14 / 4
Регистрация: 20.05.2011
Сообщений: 296
Записей в блоге: 2
23.03.2012, 20:58  [ТС]
ошибку свою нашел была не включена библиотека #include <stdlib.h> но теперь при вводе числа 12.3 он выводит 12.00 почему так происходит не пойму(
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void perevod(GtkWidget *widget,  gpointer user_data)
{
    gchar *text1;
    double a1;
    double entry_int;
    char screen[50];
    
   text1 = gtk_entry_get_text(GTK_ENTRY(entry1));
    
    entry_int = atof(text1);
    a1 = entry_int;
    
    g_sprintf(screen,"%.2f", a1);
 
    gtk_entry_set_text((GtkEntry *)entry2,screen);
    g_print(screen);
    gtk_label_set_text(GTK_LABEL(label1), screen);
}
0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
23.03.2012, 21:43
maximus1991, будь добр - выложи весь код. чтобы он не торчал развернутой портянкой - попробуй использовать CUT (выделяешь код, жмешь CUT и подписываешь например "код")
0
15 / 14 / 4
Регистрация: 20.05.2011
Сообщений: 296
Записей в блоге: 2
23.03.2012, 21:44  [ТС]
извиняюсь в 4 строке опечатка
C
1
entry_int = atof(text1);
вот как должно но все равно не работает как надо(
0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
23.03.2012, 21:52
maximus1991, ну ты весь исходник выложи, чтоб я собрал - посмотрел
0
15 / 14 / 4
Регистрация: 20.05.2011
Сообщений: 296
Записей в блоге: 2
24.03.2012, 07:00  [ТС]
вот прикрепил весь проект созданный в Anjuta
Вложения
Тип файла: rar gtk.rar (646.7 Кб, 26 просмотров)
0
15 / 14 / 4
Регистрация: 20.05.2011
Сообщений: 296
Записей в блоге: 2
24.03.2012, 07:00  [ТС]
спасибо за помощь
0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
24.03.2012, 12:05
значит - у тебя на самом деле все работает. только дробную часть надо передавать через запятую, а не точку. т.е. 12,5 а не 12.5 - точка означает конец ввода числа. поэтому он считал до точки и выдавал эту часть.
твой код я собрать не смог (видимо, у тебя более новая версия - GTK 3). Типов GtkApplication у меня нет.

код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <gtk/gtk.h>
#include <glib/gprintf.h>
//~ #include "gtk_test.h"
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <glib.h>
 
#define UI_FILE "gtk_foo.ui"
#define TOP_WINDOW "window"
 
 
    static GtkEntry *entry1, *entry2;
    static GtkLabel * label1;
 
    static GtkWidget *window;
    static GtkButton *button;
    static GtkBuilder *builder;
    static GError* error = NULL;
 
void gtktextview(GtkWidget *widget,  gpointer user_data);
 
 
 
int main(int argc, char *argv[])
{
 
    gtk_init (&argc, &argv);
 
    /* Load UI from file */
    builder = gtk_builder_new ();
    if (!gtk_builder_add_from_file (builder, UI_FILE, &error))
    {
        g_critical ("Couldn't load builder file: %s", error->message);
        g_error_free (error);
    }
 
    /* Auto-connect signal handlers */
    gtk_builder_connect_signals (builder, NULL);
 
    /* Get the window object from the ui file */
    window = GTK_WIDGET (gtk_builder_get_object (builder, TOP_WINDOW));
    if (!window)
    {
        g_critical ("Widget \"%s\" is missing in file %s.",
                TOP_WINDOW,
                UI_FILE);
    }
    entry1 = GTK_ENTRY(gtk_builder_get_object (builder, "entry1"));
    entry2 = GTK_ENTRY(gtk_builder_get_object (builder, "entry2"));
    label1 = GTK_LABEL(gtk_builder_get_object (builder, "label1"));        
    button = GTK_BUTTON(gtk_builder_get_object (builder, "button1"));
        
    g_object_unref (builder);
    gtk_main();
 
    return 0;
}
 
void perevod(GtkWidget *widget,  gpointer user_data)
{
    char *text1;
    double a1;
    double entry_int;
    char screen[50];
 
    text1 = gtk_entry_get_text(GTK_ENTRY(entry1));
 
    entry_int = atof(text1);
    a1 = entry_int;
 
    g_sprintf(screen,"%f", a1);
 
    gtk_entry_set_text((GtkEntry *)entry2,screen);
    g_print(screen);
    gtk_label_set_text(GTK_LABEL(label1), screen);
}


косяк у тебя есть в другом - при закрытии окна, программа не завершается. это потому, что у тебя окно не вызывает gtk_main_quit
на рисунке в Glade можно увидеть, как его поставить. Это очень обязательно, иначе у тебя окно закрывается, а программа в памяти остается и продолжает работать.
Будешь лепить интерфейс в глейде - обрати внимание, что можно вызывать сигналами функции gtk_widget_hide, gtk_widget_show - это позволяет управлять гуи интерфейсом без создания собственно кода на си. то есть можно открывать/закрывать окна, отображать/скрывать кнопки и другие элементы интерфейса без программирования. очень удобно. в моих исходниках можешь открыть гуи и посмотреть, как я это делал.
потом хотел заметить, что есть типовые кнопки в глейде, т.е. типовая кнопка "отмена", "закрыть", "ок" и т.д. - правильней ставить их, а не выдумывать свои, если есть типовые.
Миниатюры
Вывод текста в textview  
1
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
04.04.2012, 22:25
по списку: нужно создавать к GtkComboBox объект GtkListStore
в нем ты описываешь свои данные:
тип gchararray

xresources.txt - это на самом деле .glade, я расширение поменял, чтоб он залился. Скачаешь, поменяй расширение.
Открой файл в глейде и посмотри, как у меня по картинкам, где там че находится. Я там думаю дальше ты по аналогии разберешься.

Управлять комбобоксами, например:
gtk_combo_box_get_active_text(combobox1) - возвращает указатель на выбранную строку.
ну и так далее по манам.
Миниатюры
Вывод текста в textview   Вывод текста в textview   Вывод текста в textview  

Вложения
Тип файла: txt xresources.txt (15.7 Кб, 29 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.04.2012, 22:25
Помогаю со студенческими работами здесь

TextView выравнивание текста
В текст в TextView по умолчанию идет выравнивание текста по левому краю. Как выровнять текст по всей ширине, как если бы в Word вы нажали...

Обновление текста в TextView
Подскажите как лучше сделать. У меня постоянно изменяется значение переменной и ее нужно выводить. Пока что сделал так: ...

Анимация печатания текста в TextView
Приветствую всех. Сразу покажу, чего хочу добиться (черные косяки вокруг букв в планы не входят :D). Есть String, есть...

Динамическое изменение текста в TextView
Есть TextView в RelativeLayout, которое вмещает в себя надпись &quot;Привет мир&quot;, а вот надпись &quot;Привет весь мир&quot; уже не влезает. ...

Отображение текста (из файла) в textView
В общем не могу разобраться как сделать так что бы при нажатии на кнопку (Button) в компоненте textView отображался текст, который будет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru