The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Ошибка при запуске простой программы на GTK+ , !*! Mihon79, 09-Фев-13, 12:08  [смотреть все]
Привет всем!

Пару дней назад начал постигать азы программирования на С++ под Ubuntu.

И всё было у меня хорошо, пока не попытался разместить кнопку в определённом месте окна.
После компиляции при запуске программы у меня начала выводиться следующая ошибка:
Program Received signal SIGSEGV
Stack trace is available in the 'Call Stack' tab.

Вот листинг:

#include <gtkmm.h>

int
main (int argc, char **argv)
{
  /* Инициализируем поддержку i18n */
//  gtk_set_locale ();

  gtk_init (&argc, &argv);

  /* Список виджетов, используемых в окне */

GtkWidget* mainwin ;
GtkWidget* buttonok ;
GtkWidget* buttoncont ;
int x,y;
x = 10;
y = 10;
/* Инициализация главного окна и передача ему необходимых параметров*/

mainwin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW(mainwin),"Cистема настройки параметров linux");
gtk_window_maximize (GTK_WINDOW (mainwin));

/* Инициализация виджетов главного окна*/

buttonok = gtk_button_new_with_label("Добавить инфу");
buttoncont = gtk_fixed_new();
gtk_fixed_move (GTK_FIXED(buttoncont),buttonok,x,y);
gtk_container_add (GTK_CONTAINER (buttoncont), buttonok);
gtk_container_add (GTK_CONTAINER (mainwin), buttoncont);

  /* Показываем окно приложения и виджиты */

  gtk_widget_show_all (mainwin);
  gtk_widget_show_all (buttonok);

  /* Входим в основной цикл и ждем действий пользователя */
  gtk_main ();
  
   return 0;
}
Ошибка начала появляться после добавления строки  
gtk_fixed_move (GTK_FIXED(buttoncont),buttonok,x,y);

  • Ошибка при запуске простой программы на GTK+ , !*! skb7, 04:26 , 10-Фев-13 (1)
    По данной ошибке не подскажу, но...

    На C++ совсем не похоже. Если хотите C++ -- очень советую Qt. Он также кросс-платформенный, как и GTK, но документация намного лучше и архитектура фреймворка получше.

    Да, и такого рода вещи лучше делать в каком-то дизайнере UI -- это не только быстрее, но и намного гибче. В Qt например есть QtDesigner (интегрированный в их IDE -- QtCreator), и в нем легко накидывается форма мышкой, дальше всё это дело хранится в XML, а на этапе компиляции из XML специальным ui-компилятором создается полноценный C++ код (.h-файл).
    Не то, чтобы я за "программирование мышкой" -- но создавать ui в коде со всех сторон некошерно.

    Если заинтересовало -- могу подсказать хорошую книгу по Qt (есть в электронке) и кинуть пару ссылок.

  • Ошибка при запуске простой программы на GTK+ , !*! skb7, 04:52 , 10-Фев-13 (2)
    По теме: попробуйте перенести вызов gtk_fixed_move() за следующие 2 вызова gtk_container_add(), таким образом:

    gtk_container_add (GTK_CONTAINER (buttoncont), buttonok);
    gtk_container_add (GTK_CONTAINER (mainwin), buttoncont);
    gtk_fixed_move (GTK_FIXED(buttoncont),buttonok,x,y);

    Должно помочь.

    Хотя у меня и так не сегфолтится.

    Собираю так:
    g++ `pkg-config --cflags --libs gtkmm-2.4 glibmm-2.4` main.c

    Запускается нормально и работает, только в консоль выплёвывает такое:
    (a.out:16045): Gtk-CRITICAL **: gtk_fixed_move_internal: assertion `widget->parent == GTK_WIDGET (fixed)' failed

    Наверное у меня другая версия GTK.

    Если произвести описанное выше изменение -- тогда даже этого предупреждения в консоли нет, всё ок становится. Я не GTK разработчик, просто интуитивно догадался, что нельзя двигать кнопку, пока она не добавлена в контейнер.

    И всё же посмотрите в сторону Qt, там всё намного удобнее, мне так кажется. Не пожалеете.

  • Ошибка при запуске простой программы на GTK+ , !*! backbone, 16:55 , 11-Фев-13 (3)
    http://developer.gnome.org/gtk3/3.0/GtkFixed.html#gtk-fixed-...
    void gtk_fixed_move(GtkFixed *fixed, GtkWidget *widget, gint x, gint y);
    Moves a child of a GtkFixed container to the given position.

    buttonok не является child-ом buttoncont на момент вызова gtk_fixed_move




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру