簡體   English   中英

如何用gtk3編譯gtk2.0程序?

[英]how to compile gtk2.0 program with gtk3?

我有一個簡單的程序,在ubuntu中用gtk2.0編譯。在ubuntu11.04我安裝gtk3.then我編譯相同的代碼,我在下面的行中出錯

/* Add a timer callback to update the value of the progress bar */
timer = gtk_timeout_add (100, progress_timeout, pdata);

我只是評論該行並重新編譯它。然后我得到輸出文件。但沒有評論行它沒有正常工作。

在gtk2.0我通過以下命令編譯

gcc progressbar.c `pkg-config --cflags --libs gtk+-2.0`

並在gtk3

gcc progressbar.c `pkg-config --cflags --libs gtk+-3.0`

我有一個疑問,那個方法在gtk3.please中是否有任何棄用給我鏈接到一個簡單的文檔與examples.what是2和3之間的主要區別。完整的源代碼如下所示

#include <gtk/gtk.h>

typedef struct _ProgressData {
GtkWidget *pbar; 
} ProgressData;

gint progress_timeout( gpointer data )
{
  ProgressData *pdata = (ProgressData *)data;
  gdouble new_val;
  new_val = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (pdata->pbar)) + 0.01;

  if (new_val > 1.0)
new_val = 0.0;

  gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (pdata->pbar), new_val);

  return TRUE;
} 


int main( int   argc,
      char *argv[])
{
ProgressData *pdata;
GtkWidget *align;
GtkWidget *window;

int timer;  

GtkWidget *vbox;

gtk_init (&argc, &argv);

/* Allocate memory for the data that is passed to the callbacks */
pdata = g_malloc (sizeof (ProgressData));

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_resizable (GTK_WINDOW (window), TRUE);

    g_signal_connect ( window, "destroy", gtk_main_quit, NULL ) ;

gtk_window_set_title (GTK_WINDOW (window), "GtkProgressBar");
gtk_container_set_border_width (GTK_CONTAINER (window), 0);

vbox = gtk_vbox_new (FALSE, 5);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
gtk_container_add (GTK_CONTAINER (window), vbox);
gtk_widget_show (vbox);

/* Create a centering alignment object */
align = gtk_alignment_new (0.5, 0.5, 0, 0);
gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 5);
gtk_widget_show (align);

/* Create the GtkProgressBar */
pdata->pbar = gtk_progress_bar_new ();

gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
gtk_widget_show (pdata->pbar);

/* Add a timer callback to update the value of the progress bar */
timer = gtk_timeout_add (100, progress_timeout, pdata);


gtk_widget_show (window);

gtk_main ();

return 0;
}

您需要將gtk_timeout_add調用更改為g_timeout_add

gtk_timeout_add()

guint               gtk_timeout_add                     (guint32 interval,
                                                         GtkFunction function,
                                                         gpointer data);

Warning

gtk_timeout_add has been deprecated since version 2.4 and should not be used in 
newly-written code. Use g_timeout_add() instead.

Google“gtk_timeout_add g_timeout_add”會為您提供示例,例如http://gna.org/patch/?2563

正如jesse告訴你的那樣,你使用的是gtk_timeout_add ,它已經在GTK2中棄用了。 在GTK3中刪除了GTK2中棄用的所有符號。

要使程序在GTK3中運行,您需要確保不使用任何GTK2棄用的符號。 為此, 使用G_DISABLE_DEPRECATED(對於GLib),GTK_DISABLE_DEPRECATED符號可以幫助您確保在使用GTK2進行編譯時,您沒有使用在GTK3中刪除的符號。

您還可以使用GTK2到GTK3遷移指南 ,以及一些GNOME目標,這些目標鏈接到GNOME中用於完成相同任務的補丁,用於GLibGTK符號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM