SIGSEGV on C++/Glade/gtkmm
SIGSEGV on C++/Glade/gtkmm
我正在使用gtkmm和Glade用C++创建我的第一个GUI应用程序。我不得不合并各种教程,因为我发现没有一个教程支持Glade与Gtk::Application和各种类相结合。请参阅以下代码:
main.cpp
int main(int argc, char **argv)
{
std::cout << "Start" << std::endl;
auto app = Gtk::Application::create(argc,argv,"org.gtkmm.ex");
auto builder = Gtk::Builder::create();
builder->add_from_file("gui02.glade");
HelloWorld* helloworld;
std::cout << "helloworld compl." << std::endl;
app->run(*helloworld);
return 0;
}
helloworld.pp
#include <gtkmm.h>
class HelloWorld : public Gtk::Window
{
protected:
Glib::RefPtr<Gtk::Builder> builder;
Gtk::Button *btn1;
Gtk::Label *lb1;
public:
HelloWorld(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& refGlade);
protected:
void on_button1_clicked();
};
helloworld.cpp
#include "helloworld.hpp"
using namespace std;
using namespace Gtk;
HelloWorld::HelloWorld(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& refGlade) :
Gtk::Window(cobject), builder(refGlade)
{
builder->get_widget("label1", lb1);
builder->get_widget("button1", btn1);
btn1->signal_clicked().connect(sigc::mem_fun(*this, &HelloWorld::on_button1_clicked));
}
void HelloWorld::on_button1_clicked()
{
lb1->set_text("HW!");
}
编译使用:
g++ main.cpp helloworld.cpp -o main `pkg-config gtkmm-3.0 --cflags --libs`
命令行中的结果:
启动
helloworld compl。
分段故障(堆芯转储(
使用gdb调试(相关摘录,必要时可获得完整输出(
Glib::RefPtr::operator->(this=0x7fffffdd10(,位于/usr/include/glibmm-2.4/glibmm/RefPtr.h:260260返回pCppObject_;
线程1"主"接收信号SIGSEGV,分段故障。
来自/usr/lib/x86_64-linux-gnu/libgtkm-3.0.so.1 的Gtk::Widget::signal_hide((中的0x00007ffff7a4799e
因为我对C++很陌生(对C#有一些经验(,所以我不太习惯指针。这种情况下的错误在哪里?
使用另一个代码,我创建了一个Windows*并使用"app->run(*Window("工作得很好,所以错误发生在新的app->run((和类"HelloWorld"中的外包中。
您的代码在此处崩溃app->run(*helloworld);
您试图取消引用一个空指针。该指针不指向内存中的对象。这样做:
HelloWorld* helloworld = new HelloWorld();
std::cout << "helloworld compl." << std::endl;
app->run(*helloworld);
相关文章:
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- C++GTKMM gui循环依赖关系
- gtkmm 显示文件内容
- Gtkmm 会不断检查 Gtk::日历上的所选日期是否发生变化
- 使用 Gtkmm 以编程方式选择 Gtk::TextView 中的文本
- 将 glade 文件与程序 g++ 链接
- 如何在代码块中安装 gtkmm?
- 在 gtkmm 中异步加载图像
- Gtkmm 窗口为空白,不显示任何小部件或标题
- GTKMM:拍摄绘图区域的屏幕截图?
- 多线程 gtkmm 应用程序最简单的示例
- GTKMM:如何将键盘事件附加到绘图区域?
- 如何从 css 资源为 gtkmm3 中的多个 glade 小部件设置主题
- 错误:GTKMM 3.0 编译错误
- gtkmm/glade - 将信号处理程序连接到 MenuShell
- 如何使用GLADE和GTKMM C 重新绘制GTK ::图像组件
- GTKMM GLADE?(创建组合框文本 Entery框)
- 使用Glade和gtkmm对GTK+对象进行内存管理
- Glade/gtkmm TreeView
- SIGSEGV on C++/Glade/gtkmm