gpt4 book ai didi

c++ - gtkmm 中的程序不会显示按钮

转载 作者:行者123 更新时间:2023-11-30 02:27:31 26 4
gpt4 key购买 nike

我正在尝试用 gtkmm 编写程序,但按钮不会显示。我已尽我所能使这些按钮显示出来,但没有任何效果。我什至在主文件和 win_home.cpp 文件中都包含了“显示所有”方法,但仍然没有任何反应。然而,程序确实通过了代码,因为 cout 语句都被打印出来了。有谁知道为什么这些按钮不会显示?

主要.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()
{

}

最佳答案

在 void 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)的成员。它将被构建为一个空按钮,您只需要在之后设置标签。

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

关于c++ - gtkmm 中的程序不会显示按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41580554/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com