当前位置: 首页 > 工具软件 > Clutter > 使用案例 >

Clutter使用的问题总结

卓俊晖
2023-12-01

1. 对结构体的赋值:
   ClutterColor      stage_color;
   stage_color = {0xff, 0xff, 0x0, 0xff};
   报告错误为:  error: expected expression before '{' token
   总结: 结构体要么在初始化时赋值,要么需要对其各项分别赋值。
   如上列中:stage_color.red = 0xff, stage_color.green = 0xff, stage_color.blue = 0x0, stage_color.alpha = 0xff;
   
2. 误以为gpointer 只是基本类型(如int),声明函数void on_foreach_show(gint data, gpointer *user_data) {...};
   总结: gpointer 为 (void *).
   
3. 对(void *) 类型的指针解引用时,要先强制转化为指针的原本类型,否则无法解引用.
   报错为:
   main.c:82: warning: dereferencing 'void *' pointer
   main.c:82: error: void value not ignored as it ought to be
   
4. g_signal_connect 带进的参数无效;
   比如:g_signal_connect (row_actor, "key-focus-out", G_CALLBACK (row_actor_focus_out_event), pItem);
   回调函数的声明为:
   static gboolean row_actor_event_dispose (ClutterActor      *row_text_actor,
                   ClutterEvent    *event,
                   SubItem         *pItem)
   {...}
    总结:在g_signal_new时,指定的函数指针除了instance外只带了一个参数(clutter-actor.h文件),如下:
            void  (* key_focus_out)(ClutterActor         *actor);    
          所以回调函数应该声明为如下即可:
              static gboolean row_actor_event_dispose (ClutterActor      *row_text_actor,
                                                        SubItem         *pItem)
           
5. xargs:  build and execute command lines from standard input
  ls   |   xargs   grep   xxx    <=>   grep   xxx   `ls`  <=> 在ls的列表中找xxx字符串  
  ls   |   grep   xxx            <=>  在ls的列表中找xxx文件  

6. 如何在命令行中使用有空格的文件名和路径?
      方法1:g_sprintf(play_info, "find /"%s/" -print0 -exec /bin/media_player -src {} //;", pItem->focus_in_row_file_name);
             system(play_info); /* 小技巧 */
      方法2:g_sprintf(play_info, "/bin/media_player -src /"%s/"", pItem->focus_in_row_file_name);
             system(play_info);  /* 使用""包括路径的整体 */

 

7. EXIT_FAILURE 和 EXIT_SUCCESS 在 stdlib.h 中定义.

8. 头文件循环包含问题的解决:
   a. 使用ifndef/define/endif等结构进行预处理, 如下:
       #ifndef __CLUTTER_ACTOR_H__
       #define __CLUTTER_ACTOR_H__
       #include <clutter-actor.h>
       #endif
   b. 设置一个统一的头文件;
   c. 将可能导致循环包含的头文件写到*.c文件中.

 类似资料: