На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
  
> gtk каркас image_viewer
    начал практиковаться с gtk:

    ExpandedWrap disabled
      tname=gdirlist
      $(tname).exe : $(tname).c
          gcc -Wall -g $(tname).c -o $(tname).exe  
       
      `/bin/pkg-config --cflags --libs gtk+-2.0`
      .PHONY : clean
      clean :
          rm $(tname).exe



    ExpandedWrap disabled
      // перед компиляцией убедитесь, что pkg-config --libs
       
      --cflags gtk+-2.0 ссылается на правильный каталог
       
      gtk+-2.0
      // компиляция под гигвином не требует никаких изменений
       
      в коде и майкфайле
      #include <gtk/gtk.h>
      int ev_num=0;
       
      static gboolean delete_event( GtkWidget *widget,
                                    GdkEvent  *event,
                                    gpointer   data )
      {
          g_print ("delete event occurred\n");
          return FALSE;
      }
       
      static void destroy( GtkWidget *widget,
                           gpointer   data )
      {
          gtk_main_quit ();
      }
       
          GDir *dir;
          GtkWidget *box;
          GtkWidget *table;
          GtkWidget *entry ;
      void dirlist (GDir *pd,int ysize) {
          int i;
          const gchar *file;
          GtkWidget *label;
          gtk_widget_destroy(box);
          box = gtk_vbox_new (0,1);
          for ( i =0; i<ysize ; i++)
          {
          file = g_dir_read_name (pd);
          if ( ! file ) break;
              label = gtk_label_new(file);
          gtk_box_pack_start_defaults ( (GtkBox*)
       
      box,label);
              gtk_widget_show (label);
          }
          gtk_table_attach_defaults ( (GtkTable *)
       
      table,box,1,2,0,2);
          gtk_widget_show(box);
      }
      gboolean    gev                  (GtkWidget *widget,
                                                  GdkEvent
       
      *event,
                                                  gpointer
       
      user_data){
          if (event->type == GDK_KEY_PRESS)
          {
              const gchar *tentry;
              guint i;
              
       
      tentry=gtk_entry_get_text((GtkEntry*)entry);
              i=((GdkEventKey*) event)->keyval;
              if ( i == 65293 ) {
                  g_print(tentry);
                  g_print(" enter pressed \n");
                      dir = g_dir_open (
       
      tentry,0,0);
                      dirlist(dir,10);
                      g_dir_close(dir);
              }
              else
              {
                  g_print("gdk_event %d type:
       
      %d\n",ev_num,i);
              }
       
       
          }
          ev_num++;
          return FALSE;
      }
       
       
       
       
       
       
      int main( int   argc,
                char *argv[] )
      {
          //int ysize=10;
          GtkWidget *window;
       
          gtk_init (&argc, &argv);
       
          window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
          g_signal_connect (G_OBJECT (window), "delete_event",
                    G_CALLBACK (delete_event), NULL);
          g_signal_connect (G_OBJECT (window), "destroy",
                    G_CALLBACK (destroy), NULL);
          g_signal_connect (G_OBJECT (window), "event",
                    G_CALLBACK (gev), NULL);
          table = gtk_table_new (2,2,1);
          gtk_container_add ( (GtkContainer*) window, table);
       
          entry = gtk_entry_new();
          gtk_table_attach_defaults ( (GtkTable *)
       
      table,entry,0,1,0,1);
          gtk_widget_show (entry);
       
          GtkWidget *image;
          image = gtk_image_new_from_file("r.png");
          gtk_table_attach_defaults ( (GtkTable*)
       
      table,image,0,1,1,2);
          g_print("image size :  
       
      %x\n",gtk_image_get_pixel_size((GtkImage*)image));
          
       
       
       
          gtk_widget_show (image);
          gtk_widget_show (table);
          gtk_widget_show (window);
          gtk_main ();
          return 0;
      }


    соответсвенно возникло много нерешенных вопросов:

    - размещение виджетов в коде занимает слишком много

    времени, есть какие нить библиотеки способные считать из

    текстового файла расположение элементов и связать их с

    функциями обрабатывающими сообщения? а также записать

    изменения в интерфейсе сделаные пользователем в этот же

    файл?

    - чем можно заменить таблицу, чтобы растояние между

    элементами не менялось при изменении размеров окна?

    - как проще сделать листинг списка неопределенного

    количества файлов : путем пересоздания бокса каждый раз

    при скроллинге или есть возможность вывести на экран

    только часть элементов бокса соотвественно без его

    пересоздания?

    как перемещаться между элементами бокса ( расположены

    справа, содержат имена файлов ) через нажатия клавишь

    pgup\down с обработкой с привязкой сигнала о перемещении

    к заданной функции?

    чем лучше подсвечивать имя файла который в данный момент

    на изображении?

    как узнать размеры изображения ? как маштабировать

    изображение?

    какие библиотеки еще имеет смысл использовать для

    решения данных вопросов кроме gtk?

    присматриваюсь к pcre, image magic ....
      Цитата
      есть какие нить библиотеки способные считать из

      текстового файла расположение элементов и связать их с

      функциями обрабатывающими сообщения?

      libglade

      Цитата
      чем можно заменить таблицу, чтобы растояние между

      элементами не менялось при изменении размеров окна?

      http://library.gnome.org/devel/gtk/unstable/LayoutContainers.html


      Цитата

      как проще сделать листинг списка неопределенного

      количества файлов : путем пересоздания бокса каждый раз

      при скроллинге или есть возможность вывести на экран

      только часть элементов бокса соотвественно без его

      пересоздания?

      model-view
      есть моделька содержащие данные, есть view отображающие их
      http://library.gnome.org/devel/gtk/unstable/TreeWidget.html


      русские:
      http://linfoline.homedns.org/gtk/book1.html
      http://linfoline.homedns.org/gtk-2.10-reference-manual-ru/index.html
      http://linfoline.homedns.org/API/glib/index.html
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0289 ]   [ 16 queries used ]   [ Generated: 1.05.24, 09:47 GMT ]