2017-12-26 22 views
0

Ich möchte einfach wissen, welche Größe ein Widget hat. Ich benötige diese Informationen, um ein ScrollledWindow auf eine maximale Größe zu setzen, wenn die Größe des Widgets größer als der Bildschirm ist.gtkmm Größe des Widgets erhalten

Aber alle Funktionen, die ich kenne einen konstanten Wert von geben 1.

#include <iostream> 
#include <gtkmm.h> 
#include <gtkmm/window.h> 

class ExampleWindow: public Gtk::Window 
{ 
    Gtk::Button button; 
    public: 
    ExampleWindow(): button("Hallo") 
    { 
     add(button); 
     GetSize(); 
    } 

    void GetSize() 
    { 
     std::cout << button.get_width() << " " << button.get_height() << std::endl; 
     std::cout << button.get_allocated_width() << " " << button.get_allocated_height() << std::endl; 
    } 
}; 


int main(int argc, char* argv[]) 
{ 
    Gtk::Main kit(argc, argv); 

    ExampleWindow window; 

    window.GetSize(); 
    window.show_all_children(); 
    window.GetSize(); 
    Gtk::Main::run(window); 
    return 0; 
} 
+0

Eine Randnotiz, wenn es für Sie nützlich ist: '#include ' schon kümmert sich um die '#include '. – BobMorane

Antwort

1

Dieses viel wie this answer aussieht.

Grundsätzlich heißt es, dass, bevor die get_height() und get_width() Methoden sinnvolle Werte zurückgeben, muss das Widget realisiert sein. Da Sie diese (durch Ihre GetSize() Wrapper) innerhalb des Fensterkonstruktors aufrufen, ist es (die Schaltfläche innerhalb des Fensters) möglicherweise noch nicht realisiert, daher die falschen Werte.


BONUS

Nach this ticket:

Realize bedeutet die GDK Ressourcen für ein Widget zu erstellen. d. h. zu Instanziieren Sie das Widget auf dem Display.

, auch die Bedeutung des Wortes zu klären realize finden this. Der Autor scheint einige interessante Forschungen zu diesem Thema durchgeführt zu haben, um die Dokumentation zu klären.