GTK プログラムを作成しようとしています。ボタンを含むウィンドウを生成することができましたが、ボックスをパックして 2 つのボタンをボックスに追加しようとすると、segfault が発生します。私を混乱させるのは、何かを作成するときにセグメンテーション違反が発生しないことですが、GTK::Main::run を実行すると insead になります。
int main(int argc, char *argv[])
{
Glib::RefPtr<Gtk::Application> app =
Gtk::Application::create(argc, argv,
"org.gtkmm.examples.base");
MainWindow mainWindow;
cout << "trying to run window"<< endl;
Gtk::Main::run(mainWindow);
cout << "done running window"<< endl;
return 0;
}
と
MainWindow::MainWindow()
:quit_button("Quit"),
write_button("Write"),
window_box()
{
set_border_width(10);
quit_button.signal_clicked().connect(sigc::mem_fun(*this,
&MainWindow::quit_button_clicked));
write_button.signal_clicked().connect(sigc::mem_fun(*this,
&MainWindow::write_button_clicked));
window_box.start_pack(quit_button);
window_box.start_pack(write_button);
add(window_box);
write_button.show();
quit_button.show();
window_box.show();
}
MainWindow::~MainWindow()
{
}
void MainWindow::write_button_clicked()
{
std::cout << "Hello World" << std::endl;
}
void MainWindow::quit_button_clicked()
{
exit(0);
}
メインメソッドと MainWindow クラスのコンストラクターです。何もパックしないか、パックを少なくしようとしましたが、まだセグメンテーション違反です。私はGTKを初めて使用するので、単純なものが欠けているに違いないことを知っています。
編集:メインウィンドウの宣言
#include <gtkmm.h>
#include <iostream>
using namespace std;
class MainWindow : public Gtk::Window
{
public:
MainWindow();
~MainWindow();
protected:
//Signal Handlers
void write_button_clicked();
void quit_button_clicked();
//Widgets
Gtk::Button quit_button;
Gtk::Button write_button;
Gtk::VBox window_box;asd
};
#endif // GTKMM_EXAMPLE_HELLOWORLD_H