Domanda

Sto sviluppando un'applicazione con Gtk e Glade. La mia impressione è che è pratica comune per creare una sottoclasse di GtkWindow per la finestra principale, ma mi sono bloccato su come vorrei costruire il mio sottoclasse da una definizione GtkBuilder. Qualcuno sa come?

È stato utile?

Soluzione

La sottoclasse GtkWindow è più comune nei vari binding di linguaggio di GTK quanto lo sia in pianura C. lei non ha citato quale lingua si stava utilizzando.

Detto questo, il mio modo di sottoclasse GtkWindow in C è quello di creare il contenuto della finestra nel Glade, ma non della finestra stessa. In Glade 3 (IIRC) è possibile fare clic su un widget nella tavolozza e scegliere "Aggiungi widget come primo livello" per un non-toplevel widget di senza un contenitore.

Poi scrivere il codice per la vostra sottoclasse di GtkWindow, chiamiamolo MyAppWindow. Non voglio entrare in quella in questa risposta dal momento che ci sono molti esempi nella documentazione GObject. Nella funzione init (my_app_window_init()) caricare il file Glade, uso gtk_builder_get_object() per ottenere un puntatore al widget più esterno nel file Glade, e l'uso gtk_container_add() per aggiungerlo alla finestra si sta costruendo. Quindi utilizzare gtk_builder_connect_signals() come si farebbe normalmente.

È necessario impostare tutte le proprietà della finestra manualmente in questo modo, dal momento che non si può fare a Glade, ma a parte che ho trovato funziona abbastanza bene.

Altri suggerimenti

Non è prassi comune sottoclasse GtkWindow.

Non credo sia possibile finestra sottoclasse toplevel creata dalla definizione GtkBuilder.

esigenze GtkBuilder a conoscere il tuo widget di sottoclasse prima della creazione.

Se davvero si vuole creare la propria sottoclasse di GtkWindow ptomato descrive bene i passaggi fondamentali. E 'anche possibile creare plug-in per la radura per rendere il vostro widget personalizzati disponibili. Ma questo non è molto facile, e molto probabilmente non ciò che si vuole fare.

La maggior parte delle applicazioni utilizzano solo widget standard, senza sottoclasse nessuno di loro. Poi si carica un file radura con GtkBuilder (o libglade) non è necessario disporre di una classe speciale per la vostra interfaccia grafica (come in alcuni altri strumenti RAD) invece solo ottenere un insieme di oggetti. L'API consente di li guardi in alto per nome (e la finestra è fondamentalmente solo uno di loro). Un approccio comune è quello di guardare in alto tutti i widget che si sta per interagire con e memorizzarli in variabili globali quando il programma si avvia. Oppure, se avete bisogno di più istanze della finestra è possibile creare una struttura per memorizzarli. O è possibile semplice ricerca i widget ogni volta che ne avete bisogno. Si noti che l'insieme di oggetti che si ottiene è completamente dinamico. È possibile ad esempio spostare i widget tra le diverse finestre proprio come se si è creato l'interfaccia grafica di programmazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top