Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Gtk笔记本小部件添加新选项卡错误_C++_Widget_Gtk_Gtk3 - Fatal编程技术网

C++ Gtk笔记本小部件添加新选项卡错误

C++ Gtk笔记本小部件添加新选项卡错误,c++,widget,gtk,gtk3,C++,Widget,Gtk,Gtk3,我有一个newTab()函数,它在第一次运行时创建一个Notebook小部件,应该为下一次迭代(调用)创建新页面 它适用于第一次运行,即创建一个带有标记为“文档”的新选项卡的笔记本。但在下一次调用中,它会创建一个选项卡,但不会创建DrawingArea。我甚至不能在这些新标签间切换 我收到错误:Gtk警告**:无法在具有父控件的小部件上设置父控件 我的代码是: void myclass:: newTab() { if(!checkFlag) { drawpointer = new Dra

我有一个
newTab()
函数,它在第一次运行时创建一个
Notebook
小部件,应该为下一次迭代(调用)创建新页面

它适用于第一次运行,即创建一个带有标记为“文档”的新选项卡的笔记本。但在下一次调用中,它会创建一个选项卡,但不会创建DrawingArea。我甚至不能在这些新标签间切换

我收到错误:
Gtk警告**:无法在具有父控件的小部件上设置父控件

我的代码是:

void myclass:: newTab()
{
if(!checkFlag)
{
    drawpointer = new DrawingArea();
    drawArea = drawpointer->createArea();
    View = GTK_NOTEBOOK(gtk_notebook_new());
    gtk_notebook_set_tab_pos (View, GTK_POS_TOP);
    label = gtk_label_new ("Document");
    gtk_notebook_append_page (View, drawArea, label);
    gtk_box_pack_start(box, GTK_WIDGET(View), TRUE, TRUE, 0);
    gtk_box_reorder_child (box, GTK_WIDGET(View), 1);
    gtk_widget_show (GTK_WIDGET(View));
    checkFlag = true;
  }
    label = gtk_label_new ("Document1");
    cPage = gtk_notebook_get_current_page (View);
    gtk_notebook_insert_page (View, drawArea, label, cPage + 1);
    gtk_notebook_next_page (GTK_NOTEBOOK (View));   
  }
这是我的
DrawingArea
课程

DrawingArea:: DrawingArea()
{
}

GtkWidget* DrawingArea::createArea()
{
drawingArea = gtk_drawing_area_new();
gtk_widget_show (drawingArea);
return drawingArea;
}

我认为这就是调用已经创建的同一drawingarea小部件的问题。但我不知道该如何解决这个问题。

在得到IRC的帮助后,我推断每当第二次调用
newTab()
时,相同的
drawingArea
小部件会被添加到新选项卡中,从而导致错误

通过将drawpointer从if块中取出来解决此问题,如下所示:

void myclass:: newTab()
{
  drawpointer = new DrawingArea();
  drawArea = drawpointer->createArea();
if(!checkFlag)
{  
  View = GTK_NOTEBOOK(gtk_notebook_new());
  gtk_notebook_set_tab_pos (View, GTK_POS_TOP);
//label = gtk_label_new ("Document");
//gtk_notebook_append_page (View, drawArea, label);
  gtk_box_pack_start(box, GTK_WIDGET(View), TRUE, TRUE, 0);
  gtk_box_reorder_child (box, GTK_WIDGET(View), 1);
  gtk_widget_show (GTK_WIDGET(View));
  checkFlag = true;
}
  label = gtk_label_new ("Document1");
  cPage = gtk_notebook_get_current_page (View);
  gtk_notebook_insert_page (View, drawArea, label, cPage + 1);
  gtk_notebook_next_page (GTK_NOTEBOOK (View));   
}
这导致每次调用
newTab()
时都创建一个新的绘图小部件。 我希望这对其他人也有帮助