Pergunta

Eu estou desenvolvendo uma aplicação com Gtk e Glade.Minha impressão é de que é uma prática comum para criar uma subclasse de GtkWindow para a sua janela principal, mas eu estou preso em como eu iria construir o meu subclasse a partir de um GtkBuilder definição.Alguém sabe como?

Foi útil?

Solução

Subclasse GtkWindow é mais comum nas várias ligações de idiomas do GTK do que na planície C. Você não mencionou qual idioma estava usando.

Dito isto, a maneira como subclasse GtkWindow em C é criar o conteúdo da janela em Glade, mas não a própria janela. Na Glade 3 (IIRC), você pode clicar com o botão direito do mouse em um widget na paleta e escolher "Adicionar widget como Toplevel" para colocar um widget não-tlovel sem um contêiner.

Em seguida, escreva o código para sua subclasse de GtkWindow, vamos chamá -lo MyAppWindow. Não vou entrar nisso nesta resposta, pois há muitos exemplos na documentação do Gobject. Na função init (my_app_window_init()) Carregue o arquivo glade, use gtk_builder_get_object() Para obter um ponteiro para o widget mais externo no arquivo glade e usar gtk_container_add() Para adicioná -lo à janela que você está construindo. Em seguida, use gtk_builder_connect_signals() como você normalmente faria.

Você precisa definir todas as propriedades da janela manualmente dessa maneira, já que você não pode fazer isso em Glade, mas, além disso, achei que funciona muito bem.

Outras dicas

Não é prática comum subclasse GTKWindow.

Não acho que seja possível subclasse a janela de Toplevel criada a partir da definição do GTKBuilder.

O GTKBuilder precisa saber sobre o seu widget subclassificado antes da criação.

Se você realmente deseja criar a sua própria subclasse de GtkWindow ptomato descreve os passos básicos bem.Também é possível criar plugins para o glade para tornar a sua widgets personalizados disponíveis.Mas isso não é muito fácil, e provavelmente não é o que você quer fazer.

A maioria das aplicações apenas utilizar o padrão de widgets sem subclassificação qualquer um deles.Em seguida, carregar um arquivo glade com gtkbuilder (ou libglade) você não precisa ter uma classe especial para sua GUI (como em algumas outras ferramentas RAD) em vez disso você só obter um conjunto de objetos.A API permite que você procurá-los pelo nome (e a janela é, basicamente, apenas um deles).Uma abordagem comum é olhar todos os widgets que você está indo para interagir com e armazená-los em variáveis globais quando o programa é iniciado.Ou se você precisa de várias instâncias da janela, você pode criar uma estrutura para armazená-los em.Ou você pode simples pesquisa os widgets cada vez que você precisar deles.Note que o conjunto de objetos que você é completamente dinâmica.Por exemplo, você pode mover os widgets entre diferentes do windows como se você criou o GUI por meio de programação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top