[Resolvido] Problema com a função set_resizable() C++ e Gtkmm.

Iniciado por solanoalves, 28 de Janeiro de 2008, 22:39

tópico anterior - próximo tópico

solanoalves

Se eu defino a janela como set_resizable(false), ela abre encolhida e não consigo ver nada.

Segue o código:

#include <gtkmm/window.h>
#include <gtkmm/main.h>
#include <gtkmm/layout.h>
#include <gtkmm/button.h>
#include <gtkmm/box.h>
#include <gtkmm/buttonbox.h>
#include <gtkmm/label.h>

class Janela : public Gtk::Window{

public:

Janela() :
layout(),
adicionar("Adicionar"),
remover("Remover"),
pesquisar("Pesquisar"),
sobre("Sobre"),
cvbotao(Gtk::BUTTONBOX_START, 10),
label("bla bla bla bla"),
caixa(){

  Gtk::Window::set_size(500,300);
  Gtk::Window::set_resizable(false);
  Gtk::Window::set_title("Receitas Vegetarianas");
  add(caixa);
  caixa.pack_start(layout);
  caixa.pack_end(label);
  cvbotao.add(pesquisar);
  cvbotao.add(adicionar);
  cvbotao.add(remover);
  cvbotao.add(sobre);
  layout.put(cvbotao,30,140);
  layout.show();
  label.show();
  cvbotao.show();
  adicionar.show();
  remover.show();
  pesquisar.show();
  sobre.show();
  caixa.show();

}

~Janela(){
}

protected:

Gtk::Button adicionar;
Gtk::Button remover;
Gtk::Button pesquisar;
Gtk::Button sobre;
Gtk::Layout layout;
Gtk::VButtonBox cvbotao;
Gtk::Label label;
Gtk::HBox caixa;

};

int main(int argc, char * argv[]){

Gtk::Main kit(argc, argv);

Janela janela;
Gtk::Main::run(janela);

}


compilar com:
g++ main.cc -o main `pkg-config gtkmm-2.4 --cflags --libs`

Darcamo

Aqui precisei comentar a função
Gtk::Window::set_size(500,300);
porque set_size não faz parte da classe Gtk::Window.
Com isso compilou normal.

Ao rodar o programa, a janela tinha dimensões suficientes apenas para exibir o label "bla bla bla bla". É como se só o label estivesse "solicitando espaço na janela.
Se eu comentar o label a janela terá dimenões quase que nulas (quase uma linha vertical).

Na impede que você especifique um tamanho desejado para a janela. Acredito que a função que você gostaria de usar é set_size_request.
Por exemplo, usando
Gtk::Window::set_size_request(400,350);
a janela tem espaço para exibir tudo: o label e os botões.

Fazer a interface direto no código é interessante, mas dá uma olhada também no glade que as coisas ficam bem mais fáceis com ele.

solanoalves

Valeu cara!!!...deu certo!!

Eu tenho o glade aqui, mas prefiro fazer a mão enquanto eu conseguir hehehe