Gtkmm Window 是空白的,没有显示任何小部件或标题
Gtkmm Window is blank, not showing any widgets or title
我正在学习 gtkmm,以便将康威的生命游戏编程为演示。目前,我正在尝试在 header 栏中显示两个按钮,并且我正在学习教程,但 window 中没有显示任何内容。这是我的代码:
Display.h:
#include <gtkmm/window.h>
#include <gtkmm/headerbar.h>
#include <gtkmm/button.h>
class Display : public Gtk::Window
{
public:
Display();
Display(int xSize, int ySize);
virtual ~Display();
private:
//child widgets
Gtk::HeaderBar mHeader;
Gtk::Button startButton;
Gtk::Button stopButton;
};
Display.cpp:
#include "Display.h"
Display::Display(int xSize, int ySize):
startButton("start"),
stopButton("stop"),
mHeader()
{
//set window properties
set_title("Conway's Game of Life");
set_size_request(xSize, ySize);
set_border_width(5);
mHeader.set_title("Game of Life");
//add to header bar
mHeader.pack_start(startButton);
mHeader.pack_start(stopButton);
//add header bar
add(mHeader);
//make everything visible
show_all();
}
Display::Display()
{
Display(600, 600);
}
Display::~Display() {}
Main.cpp:
#include "Display.h"
#include <gtkmm.h>
int main(int argc, char **argv)
{
auto app = Gtk::Application::create(argc, argv);
Display Window;
return app->run(Window);
}
我已经尝试解决这个问题很长时间了,但似乎无法解决。任何帮助将不胜感激。
问题是您没有正确使用 constructor delegation。尝试按照以下方式编写默认构造函数:
Display::Display()
: Display(600, 600) // Delegate here, not in body...
{
}
它应该可以工作。请注意,这是一个 C++11 功能。
我正在学习 gtkmm,以便将康威的生命游戏编程为演示。目前,我正在尝试在 header 栏中显示两个按钮,并且我正在学习教程,但 window 中没有显示任何内容。这是我的代码:
Display.h:
#include <gtkmm/window.h>
#include <gtkmm/headerbar.h>
#include <gtkmm/button.h>
class Display : public Gtk::Window
{
public:
Display();
Display(int xSize, int ySize);
virtual ~Display();
private:
//child widgets
Gtk::HeaderBar mHeader;
Gtk::Button startButton;
Gtk::Button stopButton;
};
Display.cpp:
#include "Display.h"
Display::Display(int xSize, int ySize):
startButton("start"),
stopButton("stop"),
mHeader()
{
//set window properties
set_title("Conway's Game of Life");
set_size_request(xSize, ySize);
set_border_width(5);
mHeader.set_title("Game of Life");
//add to header bar
mHeader.pack_start(startButton);
mHeader.pack_start(stopButton);
//add header bar
add(mHeader);
//make everything visible
show_all();
}
Display::Display()
{
Display(600, 600);
}
Display::~Display() {}
Main.cpp:
#include "Display.h"
#include <gtkmm.h>
int main(int argc, char **argv)
{
auto app = Gtk::Application::create(argc, argv);
Display Window;
return app->run(Window);
}
我已经尝试解决这个问题很长时间了,但似乎无法解决。任何帮助将不胜感激。
问题是您没有正确使用 constructor delegation。尝试按照以下方式编写默认构造函数:
Display::Display()
: Display(600, 600) // Delegate here, not in body...
{
}
它应该可以工作。请注意,这是一个 C++11 功能。