Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

29.11.2009, 17:16
|
|
Познающий
Регистрация: 18.11.2009
Сообщений: 30
Провел на форуме: 86200
Репутация:
17
|
|
gtk, glade, c
Создаю в glade интерфейс для проги, вот файл интерфейса:
Код:
<?xml version="1.0"?>
<glade-interface>
<!-- interface-requires gtk+ 2.16 -->
<!-- interface-naming-policy project-wide -->
<widget class="GtkWindow" id="window1">
<child>
<widget class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="label" translatable="yes">label</property>
</widget>
</child>
</widget>
</glade-interface>
Пишу код на си:
Код:
#include <stdlib.h>
#include <stdio.h>
#include <gtk/gtk.h>
#include <glade/glade.h>
int main (int argc, char **argv)
{
GladeXML *xml;
gtk_init(&argc, &argv);
glade_init();
xml = glade_xml_new("primer.glade", "window1", NULL);
if (!xml) {
g_warning("Failed to create the interface");
return 1;
}
gtk_main();
return 0;
}
Компилирую:
Код:
gcc primer.c -o primer `pkg-config --cflags --libs libglade-2.0`
Компится без ошибок.
запускаю:
./primer
Ничего в консоле нету и прога не запускается. Все это дело естественно под Linux. Не пойму почему не работает.
Скрин:

|
|
|

30.11.2009, 15:15
|
|
Познающий
Регистрация: 18.11.2009
Сообщений: 30
Провел на форуме: 86200
Репутация:
17
|
|
Помогли на другом форуме, кому интересно:
У меня для Вас большой совет - НЕ ИСПОЛЬЗУЙТЕ LIBGLADE в своих проектах (даже учебных).
Для этого есть несколько причин:
1. Использование libglade создает лишнюю привязку к этой библиотеке, а она может быть не установлена на другой машине (в отличие от gtk+)
2. Основное назначение этой библиотеки - работа в самой среде Glade.
3. Так советуют сами разроботчики Glade и Gtk+
Но это не означает, что вы теряете возможность использование Glade xml для построения интерфейса. В Gtk+, начиная с версии 2.12, имеется особый компонент - GtkBuilder, используйте его. В примере, ниже, я покажу, как именно:
Код:
#include <gtk/gtk.h>
int main (int argc, char **argv)
{
GtkBuilder *builder; //объект, с помощью которого будет построен интерфейс пользователя
GtkWidget *mainwindow; //виджет - окно
GtkWidget *label; //виджет, с которым мы свяжем label в окне, для управления им
gtk_init(&argc, &argv); //инициализируем gtk
builder = gtk_builder_new (); //создаем новый GtkBuilder объект
gtk_builder_add_from_file(builder, "primer.xml", NULL); //загружаем описание интерфейса из XML файла
mainwindow = GTK_WIDGET(gtk_builder_get_object(builder, "mainwindow")); //связываем наше окно с окном из файла
label = GTK_WIDGET(gtk_builder_get_object(builder, "label")); //связываем наш label с label из файла
gtk_builder_connect_signals (builder, NULL); //подключаем сигналы
gtk_label_set_label((GtkLabel*)label, "Привет!"); //задаем текст для метки
gtk_widget_show (mainwindow); //показываем окно
gtk_main(); //запускаем главный цикл приложения
return 0;
}
void on_mainwindow_destroy (GtkObject *object, gpointer user_data) //обработчик сигнала закрытия главного окна
{
gtk_main_quit (); //выйти из главного цикла
}
Собственно, немного изменяется и содержимое файла-описания (я его, как видите, назвал primer.xml):
Код:
<?xml version="1.0"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="mainwindow">
<property name="window_position">center</property>
<property name="default_width">400</property>
<property name="default_height">300</property>
<signal name="destroy" handler="on_mainwindow_destroy"/>
<child>
<object class="GtkLabel" id="label">
<property name="visible">True</property>
<property name="label" translatable="yes">label</property>
</object>
</child>
</object>
</interface>
Теперь, при создании нового проекта в Glade, выбирайте формат проекта GtkBuilder и сохраняйте как "файлы GtkBuilder")
Для компиляции используйте команду:
Код:
gcc primer.c -o primer -export-dynamic `pkg-config --cflags --libs gtk+-2.0`
Опция export-dynamic означает, что производится динамическое связывание сигналов объектов и обработчиков сигналов.
Функция on_mainwindow_destroy нужна для того, что бы программа закрывалась после закрытия окна, в противном случае будет закрываться только окно, но приложение будет оставатся запущенным и висеть в памяти.
|
|
|

30.11.2009, 20:24
|
|
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме: 6490435
Репутация:
2290
|
|
Как по мне - то писать прикладнуху на сишнике - еще то извращение.
|
|
|
|
 |
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Программист gtk
|
m1lo |
С/С++, C#, Delphi, .NET, Asm |
1 |
28.06.2009 18:48 |
|
GTK и консоль
|
m1lo |
С/С++, C#, Delphi, .NET, Asm |
0 |
13.06.2009 22:31 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|