ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

gtk, glade, c
  #1  
Старый 29.11.2009, 17:16
Аватар для Kerny
Kerny
Познающий
Регистрация: 18.11.2009
Сообщений: 30
Провел на форуме:
86200

Репутация: 17
Отправить сообщение для Kerny с помощью ICQ
По умолчанию 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. Не пойму почему не работает.
Скрин:
 
Ответить с цитированием

  #2  
Старый 30.11.2009, 15:15
Аватар для Kerny
Kerny
Познающий
Регистрация: 18.11.2009
Сообщений: 30
Провел на форуме:
86200

Репутация: 17
Отправить сообщение для Kerny с помощью ICQ
По умолчанию

Помогли на другом форуме, кому интересно:

У меня для Вас большой совет - НЕ ИСПОЛЬЗУЙТЕ 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 нужна для того, что бы программа закрывалась после закрытия окна, в противном случае будет закрываться только окно, но приложение будет оставатся запущенным и висеть в памяти.
 
Ответить с цитированием

  #3  
Старый 30.11.2009, 20:24
Аватар для nerezus
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

Как по мне - то писать прикладнуху на сишнике - еще то извращение.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программист 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)
 


Быстрый переход




ANTICHAT.XYZ