gpt4 book ai didi

c++ - GTK::main::run 段错误

转载 作者:太空宇宙 更新时间:2023-11-04 12:01:57 25 4
gpt4 key购买 nike

我正在尝试编写一个 GTK 程序。我设法让我的窗口在其中生成一个按钮,但现在当我尝试打包一个盒子并向该盒子添加 2 个按钮时,我出现了段错误。令我困惑的是,当我创建任何东西时它不会出现段错误,但当我运行 GTK::Main::run 时却出现错误。

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

最佳答案

Gtk::Main 已被弃用并被 Gtk::Application 取代,它现在处理事件循环。

如果您使用 app->run(mainWindow); 而不是 Gtk::Main::run(mainWindow);,它会起作用喜欢ergosys说。

为了正确的清理,你也应该调用 app->quit() 而不是 libc 的 quit() (或者只是关闭窗口,这将终止也是主循环)

关于c++ - GTK::main::run 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13773846/

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