2017-01-10 1 views
0

Ich versuche ein Programm in gtkmm zu schreiben, aber die Schaltflächen werden nicht angezeigt. Ich habe alles gemacht, was ich weiß, um diese Knöpfe zum Vorschein zu bringen, aber nichts hat funktioniert. Ich habe sogar die "show all" -Methoden in die Dateien main und win_home.cpp eingefügt, aber es passiert immer noch nichts. Das Programm geht jedoch durch den Code, da die Cout-Anweisungen alle gedruckt werden. Hat jemand eine Idee, warum diese Tasten nicht angezeigt werden?Programm in gtkmm zeigt keine Schaltflächen

main.cpp:

#include <gtkmm.h> 
#include <iostream> 
#include "win_home.h" 

int main(int argc, char *argv[]) 
{ 
    auto app = Gtk::Application::create(argc, argv, "com.InIT.InITPortal"); 

    std::cout << "Creating Portal Window" << std::endl; 
    HomeGUI win_home; 

    win_home.set_default_size(600,400); 
    win_home.set_title("St. George InIT Home"); 

    return app->run(win_home); 
} 

win_home.cpp:

#include "win_home.h" 

HomeGUI::HomeGUI() 
{ 
    //build interface/gui 
    this->buildInterface(); 
    //show_all_children(); 

    //register Handlers 
    //this->registerHandlers(); 
} 
HomeGUI::~HomeGUI() 
{ 

} 

void HomeGUI::buildInterface() 
{ 

    std::cout << "Building Portal Interface" << std::endl; 
    m_portal_rowbox = Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 5); 
    add(m_portal_rowbox); 
     Gtk::Button m_pia_button = Gtk::Button("Printer Install Assistant"); 
      m_portal_rowbox.pack_start(m_pia_button, false, false, 0); 
      m_pia_button.show(); 
     Gtk::Button m_inventory_button = Gtk::Button("Inventory"); 
     m_inventory_button.show(); 
      m_portal_rowbox.pack_start(m_inventory_button, false, false, 0); 
      m_inventory_button.show(); 

    //add(m_portal_rowbox); 
    //m_portal_rowbox.show_all(); 
    m_portal_rowbox.show(); 
    this->show_all_children(); 
    std::cout << "Completed Portal Interface" << std::endl; 

    return; 
} 

void HomeGUI::registerHandlers() 
{ 

} 
+0

Leider habe ich keine Erfahrung in C++ (ich benutze Python). Egal, fügst du deine GtkBox dem Fenster hinzu? Das hat mich in der Vergangenheit gestolpert, wo ein "Widget" nicht zum übergeordneten Widget hinzugefügt wurde. – theGtknerd

+0

@theGtknerd das ist die 'add (m_portal_rowbox);' Zeile. – andlabs

+0

'Gtk :: Button x = Gtk :: Button (' sieht mir verdächtig. Was passiert, wenn Sie diese mit 'Gtk :: Button x (', und tun Sie das gleiche für die GtkBox? – andlabs

Antwort

1

In Leere HomeGUI::buildInterface() Sie 2 Tasten aufgebaut haben, und sie werden es zu Ihrem Box Container hinzugefügt. Wenn die Funktion zurückkehrt, werden die Schaltflächen zerstört, da sie sich außerhalb des Bereichs befinden. Da sie nicht mehr existieren, können sie nicht sichtbar sein.

Also für Sie erste Taste würden Sie so etwas wie folgt verwenden:

Gtk::Button * m_pia_button = Gtk::manage(
    new Gtk::Button("Printer Install Assistant")); 
m_portal_rowbox.pack_start(&m_pia_button, false, false, 0); 
    m_pia_button.show(); 

Ich erwarte, dass Sie einfachen Zugriff auf Ihre Tasten über die gesamte Lebensdauer des Fensters müssten. Der einfachste Weg ist, die Schaltflächen als Mitglied Ihrer Klasse zu haben. Es wird als leere Schaltfläche erstellt und Sie müssen nur die Beschriftung später festlegen.

class HomeGUI { 
    .... 
    // A button (empty) 
    Gtk::Button m_pia_button; 
    .... 
}; 
.... 
void HomeGUI::buildInterface() 
{ 
    .... 
    m_pia_button.set_label("Printer Install Assistant"); 
    m_portal_rowbox.pack_start(m_pia_button, false, false, 0); 
     m_pia_button.show(); 
    .... 
} 
+0

Ich glaube, ich war einfach nur dumm.Ich versuchte, meine Member-Variablen in der buildInterface() zu re-initialisieren, da ich sie bereits in meiner Header-Datei deklariert hatte. Vielen Dank! – TheEggSample

Verwandte Themen