Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.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++ Can';t使用来自GtkSpinButton小部件的用户输入修改全局整数变量_C++_C_Integer_Gtk_Gtk3 - Fatal编程技术网

C++ Can';t使用来自GtkSpinButton小部件的用户输入修改全局整数变量

C++ Can';t使用来自GtkSpinButton小部件的用户输入修改全局整数变量,c++,c,integer,gtk,gtk3,C++,C,Integer,Gtk,Gtk3,我使用GTK和glade编写了一个简单的程序,允许用户在GtkSpinButton中输入一个数字。一旦用户点击回车键(激活信号),全局变量应更改为用户输入的任何变量。不幸的是,这不起作用,当我在主函数中打印出全局变量时,它只会吐出一个零。当我用一根绳子和一个GtkEntry盒子做同样的事情时,效果很好。以下是源代码: //gtkspinbox test program // g++ -rdynamic -c lol.cpp $(pkg-config --cflags --libs gtk+-3.

我使用GTK和glade编写了一个简单的程序,允许用户在GtkSpinButton中输入一个数字。一旦用户点击回车键(激活信号),全局变量应更改为用户输入的任何变量。不幸的是,这不起作用,当我在主函数中打印出全局变量时,它只会吐出一个零。当我用一根绳子和一个GtkEntry盒子做同样的事情时,效果很好。以下是源代码:

//gtkspinbox test program
// g++ -rdynamic -c lol.cpp $(pkg-config --cflags --libs gtk+-3.0 gmodule-2.0)
// g++ lol.o -o lol $(pkg-config --cflags --libs gtk+-3.0 gmodule-2.0)





#include <stdlib.h>
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
#include <gtk/gtk.h>
#include <gtk/gtkx.h>
#include <math.h>
#include <ctype.h>

using namespace std;
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <iomanip>
#include <limits>
#include <cmath>
#include <regex>
GtkWidget *lolwindow;
GtkWidget *lolfixed;
GtkWidget *lolentry;
GtkBuilder  *builder;
int lol;


extern "C" void on_lolentry_activate(GtkEntry *e, gpointer user_data){
lol = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(lolentry));

gtk_widget_destroy(lolwindow);

}

int main(int argc, char **argv){

    gtk_init(&argc, &argv);//initializes gtk
    builder = gtk_builder_new_from_file ("lol.glade");//reads the xml file generated by glade
    gtk_builder_connect_signals(builder, NULL); 
    lolwindow = GTK_WIDGET(gtk_builder_get_object(builder, "lolwindow"));
    g_signal_connect(lolwindow, "destroy", G_CALLBACK(gtk_main_quit), NULL);
    lolfixed = GTK_WIDGET(gtk_builder_get_object(builder, "lolfixed"));
    lolentry = GTK_WIDGET(gtk_builder_get_object(builder, "lolentry"));


    gtk_widget_show(lolwindow);
    gtk_main();

    cout << lol << "\n";
}
//gtkspinbox测试程序
//g++-rdynamic-c lol.cpp$(pkg配置--cflags--libs gtk+-3.0 gmodule-2.0)
//g++lol.o-o lol$(pkg配置--cflags--libs gtk+-3.0 gmodule-2.0)
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
GtkWidget*窗口;
GtkWidget*已修复;
GtkWidget*lolentry;
GtkBuilder*builder;
int-lol;
外部“C”无效,输入激活(GtkEntry*e,gpointer用户数据){
lol=gtk_旋转按钮_获取值_作为int(gtk_旋转按钮(lolentry));
gtk_小部件_销毁(窗口);
}
int main(int argc,字符**argv){
gtk_init(&argc,&argv);//初始化gtk
builder=gtk_builder_new_from_file(“lol.glade”);//读取glade生成的xml文件
gtk_builder_connect_信号(builder,NULL);
lolwindow=GTK_小部件(GTK_生成器_获取_对象(生成器,“lolwindow”);
g_信号连接(lolwindow,“销毁”,g_回调(gtk_main_退出),NULL);
lolfixed=GTK_小部件(GTK_生成器_获取_对象(生成器,“lolfixed”);
lolentry=GTK_小部件(GTK_生成器_获取对象(生成器,“lolentry”);
gtk_widget_show(窗口);
gtk_main();

cout显然glade中调整变量的最大值被设置为零,这就是全局变量被设置为零的原因。一旦我为最大值输入了一个不同的值,问题就消失了。

看一看和。
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.2 -->
<interface>
  <requires lib="gtk+" version="3.20"/>
  <object class="GtkAdjustment" id="adjustment1">
    <property name="lower">1</property>
    <property name="upper">100</property>
    <property name="step_increment">1</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkWindow" id="lolwindow">
    <property name="can_focus">False</property>
    <property name="title" translatable="yes">enter a number lmao</property>
    <child type="titlebar">
      <placeholder/>
    </child>
    <child>
      <object class="GtkFixed" id="lolfixed">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <child>
          <object class="GtkSpinButton" id="lolentry">
            <property name="width_request">100</property>
            <property name="height_request">80</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="adjustment">adjustment1</property>
            <signal name="activate" handler="on_lolentry_activate" swapped="no"/>
          </object>
          <packing>
            <property name="x">161</property>
            <property name="y">95</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>