简体   繁体   English

具有gtkmm派生小部件的空白窗口

[英]Blank window with gtkmm derived widget

I'm currently programming a little Desktop application in c++ and it's the first time, that I use gtkmm for it. 我目前正在用c ++编写一个小型Desktop应用程序,这是我第一次使用gtkmm。

I followed the tutorials from here but all I get is a blank window. 我从这里开始按照教程学习,但是得到的只是一个空白窗口。 It worked before refacturing the MainWindow to its own class... 它在将MainWindow修改为自己的类之前起作用了。

Please note: I have ommited the includes, usings and signal handler implementations. 请注意:我省略了include,usings和signal handler实现。

This is my main-function: 这是我的主要功能:

int main(int argc, char **argv)
{
    RefPtr<Application> app = Application::create(argc, argv, "org.mw88.adbtool");
    //Main kit(argc, argv);

    RefPtr<Builder> builder = Builder::create();
    try
    {
        builder->add_from_file("Gui.glade");

        MainWindow *window = NULL;
        builder->get_widget_derived("MainWindow", window);
        app->run(*window);
        //kit.run(*window);
    }
    catch (const FileError& ex)
    {
        cerr << "FileError: " << ex.what() << endl;        
        return EXIT_FAILURE;
    }
    catch (const MarkupError& ex)
    {
        cerr << "MarkupError: " << ex.what() << endl;        
        return EXIT_FAILURE;
    }
    catch (const BuilderError& ex)
    {
        cerr << "BuilderError: " << ex.what() << endl;
        return EXIT_FAILURE;
    }

    return EXIT_SUCCESS;
}

My MainWindow-Header: 我的MainWindow-Header:

class MainWindow : public Window
{
public:
    MainWindow(BaseObjectType* cobject, const RefPtr<Builder>& refBuilder);
    virtual ~MainWindow();
    void show(RefPtr<Application> &app);

private:
    RefPtr<Builder>     builder;
    ToolButton          *addButton;
    ToolButton          *editButton;
    ToolButton          *deleteButton;
    ToolButton          *connectButton;
    TreeView            *hostList;
    RefPtr<ListStore>   listStore; 
    Columns             cols;

    //Signal handlers:
    virtual void onAddClicked();
    virtual void onEditClicked();
    virtual void onDeleteClicked();
    virtual void onConnectClicked();  
};

This is the constructor for the MainWindow class: 这是MainWindow类的构造函数:

MainWindow::MainWindow(BaseObjectType* cobject, const RefPtr<Builder>& refBuilder)
{
    this->builder = refBuilder;

    addButton = NULL;
    editButton = NULL;
    deleteButton = NULL;
    connectButton = NULL;
    hostList = NULL;

    builder->get_widget("hostList", hostList);

    builder->get_widget("addButton", addButton);
    addButton->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::onAddClicked));

    builder->get_widget("editButton", editButton);
    editButton->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::onEditClicked));

    builder->get_widget("deleteButton", deleteButton);
    deleteButton->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::onDeleteClicked));

    builder->get_widget("connectButton", connectButton);
    connectButton->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::onConnectClicked));

    hostList->set_model(listStore = ListStore::create(cols));
    hostList->append_column("Host", cols.host);
    hostList->append_column("Port", cols.port);

    for (int i = 0; i < 20; i++)
    {
        TreeModel::Row row = *(listStore->append());
        row[cols.host] = "Testhost";
        row[cols.port] = i;
    }

    show_all_children();
}

It seems that all Widgets are returned from the builder correctly but app->run only displays an empty Window. 似乎所有Widget都正确地从构建器返回,但是app-> run仅显示一个空Window。 What could be the reason for that? 可能是什么原因呢?

Your constructor isn't complete, you need to initialize the base class with cObject: 您的构造函数不完整,您需要使用cObject初始化基类:

MainWindow::MainWindow(BaseObjectType* cobject, const RefPtr<Builder>& refBuilder)
  : Gtk::Window(cObject)  // add this
{
    this->builder = refBuilder;
    ...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM