2017-01-10 57 views
0

我想在gtkmm中編寫程序,但按鈕不會顯示出來。我已經盡我所知讓這些按鈕顯示,但沒有任何工作。我甚至在main和win_home.cpp文件中都包含了'show all'方法,但仍然沒有任何反應。但是,程序會通過代碼,因爲cout語句全部正在打印。有誰知道爲什麼這些按鈕不會顯示出來嗎?在gtkmm中的程序不會顯示按鈕

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

不幸的是,我沒有在c + +(我使用python)的經驗。同樣,你是否將GtkBox添加到窗口中?這在過去一直困擾着我,一個'小部件'沒有被添加到父部件中。 – theGtknerd

+0

@theGtknerd就是'add(m_portal_rowbox)'行。 – andlabs

+0

'Gtk :: Button x = Gtk :: Button('對我來說看起來很可疑,如果用'Gtk :: Button x('替換那些GtkBox,會發生什麼呢? – andlabs

回答

1

在虛空HomeGUI::buildInterface()你創建2個按鈕,它們都將其添加到您的箱子容器。當函數返回時,按鈕被銷燬,因爲它們現在超出了範圍。由於它們不再存在,因此它們不可見。

所以你第一個按鈕,你會使用這樣的:

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(); 

我希望你將需要整個窗口的續航時間輕鬆訪問您的按鈕。最簡單的方法是將按鈕作爲您班級的成員。它將被構造成一個空的按鈕,然後你只需要設置標籤。

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

我想我只是愚蠢的,我試圖在buildInterface()中重新初始化我的成員變量,因爲我已經在我的頭文件中聲明瞭它們。非常感謝! – TheEggSample