Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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+的空白用户界面的程序;2 我用GTK库(2版)编写了一个C++软件,用于UI。_C++_User Interface_Gtk - Fatal编程技术网

C++;带有GTK+的空白用户界面的程序;2 我用GTK库(2版)编写了一个C++软件,用于UI。

C++;带有GTK+的空白用户界面的程序;2 我用GTK库(2版)编写了一个C++软件,用于UI。,c++,user-interface,gtk,C++,User Interface,Gtk,编译(使用makefile)没有错误,但当我执行程序时,窗口显示为空 我想我在创建接口的代码中犯了一些错误。 特别是我对小部件的定位和大小有一些疑问 .h接口文件由struct widgets_t声明(包含指向接口小部件的所有指针)和函数build_接口声明(创建和初始化UI)组成 .cpp接口文件为 #include <gtk/gtk.h> #include "interface.h" void build_interface (widgets_t *widgets) { //

编译(使用makefile)没有错误,但当我执行程序时,窗口显示为空

我想我在创建接口的代码中犯了一些错误。 特别是我对小部件的定位和大小有一些疑问

.h接口文件由struct widgets_t声明(包含指向接口小部件的所有指针)和函数build_接口声明(创建和初始化UI)组成

.cpp接口文件为

#include <gtk/gtk.h>
#include "interface.h"
void build_interface (widgets_t *widgets)
{
  //window
  widgets->W = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(GTK_WINDOW(widgets->W), "myNavigator");
  gtk_window_set_default_size(GTK_WINDOW(widgets->W),800,600);
  gtk_window_set_position(GTK_WINDOW(widgets->W), GTK_WIN_POS_NONE);
  //menu bar
  widgets->MB = gtk_menu_bar_new();
  widgets->IF = gtk_menu_item_new_with_mnemonic("File");
  gtk_menu_bar_append(GTK_MENU_BAR(widgets->MB), widgets->IF);
  widgets->MF = gtk_menu_new();
  gtk_menu_item_set_submenu(GTK_MENU_ITEM(widgets->IF), widgets->MF);
  widgets->IQ = gtk_menu_item_new_with_mnemonic("Close");
  gtk_menu_shell_append (GTK_MENU_SHELL (widgets->MF), widgets->IQ);
  widgets->IM = gtk_menu_item_new_with_mnemonic("Map");
  gtk_menu_bar_append(GTK_MENU_BAR(widgets->MB), widgets->IM);
  widgets->MM = gtk_menu_new();
  gtk_menu_item_set_submenu(GTK_MENU_ITEM(widgets->IM), widgets->MM);
  widgets->ILM = gtk_menu_item_new_with_mnemonic("Load");
  gtk_menu_shell_append (GTK_MENU_SHELL (widgets->MM), widgets->ILM);
  widgets->IP = gtk_menu_item_new_with_mnemonic("Path");
  gtk_menu_bar_append(GTK_MENU_BAR(widgets->MB), widgets->IP);
  widgets->MP = gtk_menu_new();
  gtk_menu_item_set_submenu(GTK_MENU_ITEM(widgets->IP), widgets->MP);
  widgets->ICP = gtk_menu_item_new_with_mnemonic("Calculate");
  gtk_menu_shell_append (GTK_MENU_SHELL (widgets->MP), widgets->ICP);
  //image to display a map
  widgets->I = gtk_image_new();
  //widgets for input
  widgets->LF = gtk_label_new("Origin:");
  widgets->SBF = gtk_spin_button_new_with_range(0,0,1);
  widgets->LT = gtk_label_new("Destination:");
  widgets->SBT = gtk_spin_button_new_with_range(0,0,1);
  //button to perform software elaboration
  widgets->BCP = gtk_button_new_with_mnemonic("Calculate Path");
  //containers
  //vertical box
  widgets->VB = gtk_vbox_new(false, 0);
  gtk_box_pack_start(GTK_BOX(widgets->VB), widgets->LF, FALSE, FALSE, 0);
  gtk_box_pack_start(GTK_BOX(widgets->VB), widgets->SBF, FALSE, FALSE, 0);
  gtk_box_pack_start(GTK_BOX(widgets->VB), widgets->LT, FALSE, FALSE, 0);
  gtk_box_pack_start(GTK_BOX(widgets->VB), widgets->SBT, FALSE, FALSE, 0);
  gtk_box_pack_start(GTK_BOX(widgets->VB), widgets->BCP, FALSE, FALSE, 0);
  //horizontal box
  widgets->HB = gtk_hbox_new(false, 0);
  gtk_box_pack_start(GTK_BOX(widgets->HB), widgets->MB, FALSE, FALSE, 0);
  gtk_box_pack_start(GTK_BOX(widgets->HB), widgets->I, FALSE, FALSE, 0);
  gtk_box_pack_start(GTK_BOX(widgets->HB), widgets->VB, FALSE, FALSE, 0);
  //add vertical box to the window
  gtk_container_add(GTK_CONTAINER(widgets->W), widgets->VB);
  //display widgets
  gtk_widget_show_all(widgets->W);
}
#包括
#包括“interface.h”
void build_接口(widgets_t*widgets)
{
//窗口
窗口小部件->W=gtk_窗口_新建(gtk_窗口_顶层);
gtk_窗口设置标题(gtk_窗口(小部件->W),“myNavigator”);
gtk_窗口设置默认大小(gtk_窗口(小部件->W),800600);
gtk_窗口设置_位置(gtk_窗口(窗口小部件->W),gtk_WIN_位置无);
//菜单栏
widgets->MB=gtk_菜单_栏_新建();
widgets->IF=gtk_菜单_项_新建_,带助记符(“文件”);
gtk_菜单_栏_附加(gtk_菜单_栏(小部件->MB),小部件->如果);
widgets->MF=gtk_菜单_新建();
gtk_菜单项设置子菜单(gtk_菜单项(widgets->IF),widgets->MF);
widgets->IQ=gtk_菜单_项_新建_,带助记符(“关闭”);
gtk_menu_shell_append(gtk_menu_shell(widgets->MF),widgets->IQ);
widgets->IM=gtk_菜单_项_新建_,带助记符(“地图”);
gtk_菜单栏_附加(gtk_菜单栏(小部件->MB),小部件->IM);
widgets->MM=gtk_菜单_新建();
gtk_菜单项设置子菜单(gtk_菜单项(小部件->IM),小部件->MM);
widgets->ILM=gtk_菜单项_新建_,带有助记符(“加载”);
gtk_菜单_外壳_附加(gtk_菜单_外壳(小部件->MM),小部件->ILM);
widgets->IP=gtk_菜单_项_新建_,带助记符(“路径”);
gtk_菜单_栏_附加(gtk_菜单_栏(小部件->MB),小部件->IP);
widgets->MP=gtk_menu_new();
gtk_菜单项设置子菜单(gtk_菜单项(小部件->IP),小部件->MP);
widgets->ICP=gtk_菜单_项_新建_,带助记符(“计算”);
gtk_菜单_外壳_附加(gtk_菜单_外壳(小部件->MP),小部件->ICP);
//要显示地图的图像
widgets->I=gtk_image_new();
//用于输入的小部件
小部件->LF=gtk_标签_新(“来源:”);
widgets->SBF=gtk_旋转_按钮_新建_,范围为(0,0,1);
widgets->LT=gtk_标签_新(“目的地:”);
widgets->SBT=gtk_旋转_按钮_新建_,范围为(0,0,1);
//执行软件精化的按钮
widgets->BCP=gtk_按钮_new_,带有助记符(“计算路径”);
//容器
//垂直盒
widgets->VB=gtk_vbox_new(false,0);
gtk_-box_-pack_-start(gtk_-box(widgets->VB),widgets->LF,FALSE,FALSE,0);
gtk_-box_-pack_-start(gtk_-box(widgets->VB),widgets->SBF,FALSE,FALSE,0);
gtk_-box_-pack_-start(gtk_-box(widgets->VB),widgets->LT,FALSE,FALSE,0);
gtk_-box_-pack_-start(gtk_-box(widgets->VB),widgets->SBT,FALSE,FALSE,0);
gtk_-box_-pack_-start(gtk_-box(widgets->VB),widgets->BCP,FALSE,FALSE,0);
//水平盒
widgets->HB=gtk_hbox_new(false,0);
gtk_-box_-pack_-start(gtk_-box(widgets->HB),widgets->MB,FALSE,FALSE,0);
gtk_-box_-pack_-start(gtk_-box(widgets->HB),widgets->I,FALSE,FALSE,0);
gtk_-box_-pack_-start(gtk_-box(widgets->HB),widgets->VB,FALSE,FALSE,0);
//将垂直框添加到窗口
gtk_容器添加(gtk_容器(小部件->W),小部件->VB);
//显示小部件
gtk_widget_show_all(widgets->W);
}
有人发现了一些错误并帮助我显示UI?:)


提前谢谢大家

正如评论中所说,您未能为小部件设置家长:

widgets->W应该包含widgets->HB,而不是widgets->VB

如果您可以从终端运行您的程序(如果您使用的是windows“cmd”应该可以运行),那么当您将“VB”添加到“W”时,GTK应该警告您错误的家长行为

还请注意,您可能希望对中间对象(如“vboxes”)以及在程序执行期间不会更改的对象使用本地声明

还请注意,您也可以使用glade或通过手动方式在XML中构建接口


仅当在程序执行过程中需要更改界面时,才应使用IMHO以编程方式构建的GUI。

如注释所述,您未能创建小部件:

widgets->W应该包含widgets->HB,而不是widgets->VB

如果您可以从终端运行您的程序(如果您使用的是windows“cmd”应该可以运行),那么当您将“VB”添加到“W”时,GTK应该警告您错误的家长行为

还请注意,您可能希望对中间对象(如“vboxes”)以及在程序执行期间不会更改的对象使用本地声明

还请注意,您也可以使用glade或通过手动方式在XML中构建接口


只有当界面在程序执行期间需要进行动态更改时,才应使用IMHO编程构建的GUI。

我想你的意思是说
gtk\u container\u add(gtk\u container(widgets->W),widgets->HB)。注意使用了
HB
而不是
VB
。你应该在stderr上收到一条关于给控件两个父控件的警告。我想你的意思是说
gtk\u container\u add(gtk\u container(widgets->W),widgets->HB)。注意使用了
HB
而不是
VB
。您应该在stderr上收到一条关于为控件提供两个父控件的警告。