Power Duckets
Olá,Caro Visitante!
quer ter a permissão de ver Link's Fazer Tutoriais
e Saber mas sobre o fórum? Registre-se Já O melhor conteúdo encontra-se aqui

Já é um Membro?
Logue-se e faça parte do nosso Mundo de Lazer.

Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Membro
Membro
Localização Localização : sub-mundo da informatica
Ver perfil do usuário

[tutorial] gtk em c/c++ - 9º parte

em Ter Jul 02, 2013 5:58 pm
bom galera essa e a 9º parte do tutorial, para começar ela fazemos uma janela simples u.u

Código:
#include <stdio.h>
#include <gtk/gtk.h>

int main(int argc, char **argv)
{
   GtkWidget *janela;
   gtk_init(&argc,&argv);
   janela = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   gtk_widget_show_all(janela);
   g_signal_connect(GTK_OBJECT(janela),"destroy",G_CALLBACK(gtk_main_quit),NULL);
   gtk_main();
}

no tuto anterior vimos o botao toggle q fica apertado ate apertar ele denovo, porem o uso do botao toggle e mais para aqueles botao q usa o proprio estado em uma condiçao sem precisar criar variaveis para armazenar essa determinado estado (um bom exemplo e um botao para acender e apagar a luz se ele tiver ativo ela vai apagar quando clicar e se ele nao tiver ele vai acender quando clicar), mais se uso do toggle for apenas para checar se esta ou nao ativo podemos usar o botao check, para usar o check usamos a funçao gtk_check_button_new_with_label passamos como argumento uma string e atribuimos essa funçao a um ponteiro do tipo GtkWidget, tambem adicionamos ele a janela


Código:
#include <stdio.h>
#include <gtk/gtk.h>

int main(int argc, char **argv)
{
   GtkWidget *janela, *check;
   gtk_init(&argc,&argv);
   janela = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   check = gtk_check_button_new_with_label("voce e maior de idade?");
   gtk_container_add(GTK_CONTAINER(janela),check);
   gtk_widget_show_all(janela);
   g_signal_connect(GTK_OBJECT(janela),"destroy",G_CALLBACK(gtk_main_quit),NULL);
   gtk_main();
}

[Você precisa estar registrado e conectado para ver esta imagem.]

a desvantagem entre o toggle e o check, q no check teriamos q criar um outro botao para executar ou um evento, para agente saber se esta ativo ou nao basta usar a mesma funçao q usamos no toggle q seria o gtk_toogle_button_get_active

Código:
#include <stdio.h>
#include <gtk/gtk.h>

GtkWidget *check;

void fts_check(void)
{
   GtkWidget *janela2, *label;
   janela2 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check)))
   {
      label = gtk_label_new("voce e maior de idade");
   }
   else
   {
      label = gtk_label_new("voce e menor de idade");
   }
   gtk_container_add(GTK_CONTAINER(janela2),label);
   gtk_widget_show_all(janela2);
}

int main(int argc, char **argv)
{
   GtkWidget *janela, *fixo, *botao;
   gtk_init(&argc,&argv);
   janela = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   check = gtk_check_button_new_with_label("voce e maior de idade?");
   botao = gtk_button_new_with_label("executar");
   fixo = gtk_fixed_new();
   gtk_container_add(GTK_CONTAINER(janela),fixo);
   gtk_fixed_put(GTK_FIXED(fixo),check,0,0);
   gtk_fixed_put(GTK_FIXED(fixo),botao,60,30);
   gtk_widget_show_all(janela);
   g_signal_connect(GTK_OBJECT(janela),"destroy",G_CALLBACK(gtk_main_quit),NULL);
   g_signal_connect(GTK_OBJECT(botao),"clicked",G_CALLBACK(fts_check),NULL);
   gtk_main();
}

[Você precisa estar registrado e conectado para ver esta imagem.]

existe tambem os radio button q sao parecido com os check button a diferença q eles sao um todo os botoes sao interligado e se alternam entre si, para agente criar um radio button e mais complicado q check button pelo motivo da gente ter q interligar eles com uma GSList para começar vamos criar os ponteiros para os widgets no caso vou criar dois radio e a GSList (tambem vou criar um fixo para poder manipular os widgets)

Código:
#include <stdio.h>
#include <gtk/gtk.h>

int main(int argc, char **argv)
{
   GtkWidget *janela, *radio1, *radio2, *fixo;
   GSList *lista;
   gtk_init(&argc,&argv);
   janela = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   gtk_widget_show_all(janela);
   g_signal_connect(GTK_OBJECT(janela),"destroy",G_CALLBACK(gtk_main_quit),NULL);
   gtk_main();
}

agora vamos criar o radio button com a funçao gtk_radio_button_new_with_label passamos como argumento para o primeiro radio button NULL depois uma string

Código:
#include <stdio.h>
#include <gtk/gtk.h>

int main(int argc, char **argv)
{
   GtkWidget *janela, *radio1, *radio2, *fixo;
   GSList *lista;
   gtk_init(&argc,&argv);
   janela = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   radio1 = gtk_radio_button_new_with_label(NULL,"sim");
   gtk_widget_show_all(janela);
   g_signal_connect(GTK_OBJECT(janela),"destroy",G_CALLBACK(gtk_main_quit),NULL);
   gtk_main();
}

agora agente adiciona o radio button no GSList com a funçao gtk_radio_button_group, passamos como argumento o radio button e atribuimos ao GSList

Código:
#include <stdio.h>
#include <gtk/gtk.h>

int main(int argc, char **argv)
{
   GtkWidget *janela, *radio1, *radio2, *fixo;
   GSList *lista;
   gtk_init(&argc,&argv);
   janela = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   radio1 = gtk_radio_button_new_with_label(NULL,"sim");
   lista = gtk_radio_button_group(GTK_RADIO_BUTTON(radio1));
   gtk_widget_show_all(janela);
   g_signal_connect(GTK_OBJECT(janela),"destroy",G_CALLBACK(gtk_main_quit),NULL);
   gtk_main();
}

nos outros radio button onde agente coloco NULL agente coloca a GSList, tambem temos q adicionar os demais radio button na lista

Código:
#include <stdio.h>
#include <gtk/gtk.h>

int main(int argc, char **argv)
{
   GtkWidget *janela, *radio1, *radio2, *fixo;
   GSList *lista;
   gtk_init(&argc,&argv);
   janela = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   radio1 = gtk_radio_button_new_with_label(NULL,"sim");
   lista = gtk_radio_button_group(GTK_RADIO_BUTTON(radio1));
   radio2 = gtk_radio_button_new_with_label(lista,"nao");
   lista = gtk_radio_button_group(GTK_RADIO_BUTTON(radio2));
   gtk_widget_show_all(janela);
   g_signal_connect(GTK_OBJECT(janela),"destroy",G_CALLBACK(gtk_main_quit),NULL);
   gtk_main();
}

veja um exemplo mais completo

Código:
#include <stdio.h>
#include <gtk/gtk.h>

int main(int argc, char **argv)
{
   GtkWidget *janela, *radio1, *radio2, *fixo;
   GSList *lista;
   gtk_init(&argc,&argv);
   janela = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   radio1 = gtk_radio_button_new_with_label(NULL,"sim");
   lista = gtk_radio_button_group(GTK_RADIO_BUTTON(radio1));
   radio2 = gtk_radio_button_new_with_label(lista,"nao");
   lista = gtk_radio_button_group(GTK_RADIO_BUTTON(radio2));
   fixo = gtk_fixed_new();
   gtk_container_add(GTK_CONTAINER(janela),fixo);
   gtk_fixed_put(GTK_FIXED(fixo),radio1,0,0);
   gtk_fixed_put(GTK_FIXED(fixo),radio2,60,0);
   gtk_widget_show_all(janela);
   g_signal_connect(GTK_OBJECT(janela),"destroy",G_CALLBACK(gtk_main_quit),NULL);
   gtk_main();
}

[Você precisa estar registrado e conectado para ver esta imagem.]

para agente saber se o radio button ta selecionado usamos a funçao gtk_toggle_button_get_active

Código:
#include <stdio.h>
#include <gtk/gtk.h>

GtkWidget *radio1, *radio2;

void fts_radio(void)
{
   if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio1)))
   {
      gtk_main_quit();
   }
   if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio2)))
   {
   }
}

int main(int argc, char **argv)
{
   GtkWidget *janela, *fixo, *botao;
   GSList *lista;
   gtk_init(&argc,&argv);
   janela = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   radio1 = gtk_radio_button_new_with_label(NULL,"sim");
   lista = gtk_radio_button_group(GTK_RADIO_BUTTON(radio1));
   radio2 = gtk_radio_button_new_with_label(lista,"nao");
   lista = gtk_radio_button_group(GTK_RADIO_BUTTON(radio2));
   fixo = gtk_fixed_new();
   botao = gtk_button_new_with_label("sair");
   gtk_container_add(GTK_CONTAINER(janela),fixo);
   gtk_fixed_put(GTK_FIXED(fixo),radio1,0,0);
   gtk_fixed_put(GTK_FIXED(fixo),radio2,60,0);
   gtk_fixed_put(GTK_FIXED(fixo),botao,40,30);
   gtk_widget_show_all(janela);
   g_signal_connect(GTK_OBJECT(janela),"destroy",G_CALLBACK(gtk_main_quit),NULL);
   g_signal_connect(GTK_OBJECT(botao),"clicked",G_CALLBACK(fts_radio),NULL);
   gtk_main();
}

[Você precisa estar registrado e conectado para ver esta imagem.]

bom galera ate o proximo ^^

by hacker fts315
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum