我有这个newTab()
函数在第一次运行时创建一个Notebook
小部件,应该为下一次迭代(调用)创建新页面。
它适用于第一次运行,即创建一个带有标签为" Document"的新标签的笔记本。但是在下一次调用时,它会创建一个选项卡,但不会创建DrawingArea。我甚至无法切换这些新标签。
我收到错误:Gtk-WARNING **: Can't set a parent on widget which has a parent
我的代码是:
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小部件的问题。但我不知道如何解决这个问题。
答案 0 :(得分:0)
在获得IRC的帮助后,我推断,每当第二次调用newTab()
时,相同的drawingArea
窗口小部件就会被添加到新选项卡中,从而导致错误。
通过从if块中取出drawpointer来解决这个问题:
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()
时都会创建一个新的绘图小部件。
我希望这也有助于其他人。