gpt4 book ai didi

c - Gtk:Gtk-CRITICAL **:gtk_spin_button_get_value_as_int:断言 'GTK_IS_SPIN_BUTTON (spin_button)' 失败

转载 作者:行者123 更新时间:2023-11-30 16:55:14 24 4
gpt4 key购买 nike

GUI 本身启动正常。每次按下按钮时,都会调用一个函数,该函数通过 SPI 与 DAC 进行通信。如果按下按钮且函数 gtk_spin_button_get_value_as_int() 返回 0,则会出现错误。但按钮本身可以工作。

错误消息:

Gtk-CRITICAL **:gtk_spin_button_get_value_as_int: assertion 'GTK_IS_SPIN_BUTTON (spin_button)'

这是我的源代码:

#include<stdio.h>
#include<wiringPi.h>
#include<gtk/gtk.h>

#define SPAM 1

#define SPIDELAY 500


#define CPLDSPEED 500000
#define DACSPEED 500000


GtkWidget *g_lbl_hello;
GtkWidget *g_lbl_count;
GtkWidget *spin1,*spin2,*spin3,*spin4,*spin5;
int channel1,dac1=0;
int channel2,dac2=0;
int channel3,dac3=0;
int channel4,dac4=0;
int dac5=0;

//Konvertierung der Adresse zum Sendeformat
char createAdress(int channel,int dac){
char aout;
int test;
test=(channel*16)+dac;
aout=(channel*16)+dac;
printf("\n\nAdeDEC:%i\n",test);
printf("Adresse:Fx%0x\n\n",aout);
return aout;
}

//Kovertierung des DACWertes zum Sendeformmat
char *createValue(short dacvalue){

static char vout[1];
vout[1]=dacvalue & 0xFF;
vout[0]=dacvalue>>8;
printf("\n\nWert:Fx%02x%02x\n\n",vout[0],vout[1]);
return vout;
}

void write_dac(int value,int dac,int channel){
//Sendeformat der Adresse
unsigned char a[0];
printf("Schalte CS für DAC%i%i LOW\n",channel,dac);
a[0]=createAdress(channel,dac);
wiringPiSPIDataRW(0,a,1);


printf("Schreibe Wert %hu auf den DAC%i%i",value,channel,dac);
wiringPiSPIDataRW(1,createValue(value),2);

printf("Schalte CS für DAC%i%i HIGH\n",channel,dac);
a[0]=0x00;
wiringPiSPIDataRW(0,a,1);

}


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

//Sendeformat des DAC-Wertes
unsigned char *v;

//Zwischenspeicher für die Daten
unsigned short value;
int channel,dac, spilocj=0;
//SPI Setup
wiringPiSetup();
//Kommunikation mit CPLD wird eingerichtet
if (wiringPiSPISetup(0,CPLDSPEED)==-1)
{
printf("Du hast was falsch gemacht beim CPLDSPI\n");
}

//Kommunikation mit DAC wird eingerichtet
if (wiringPiSPISetup(1,DACSPEED)==-1)
{
printf("Du hast was falsch gemacht beim DACSPI\n");
}


GtkBuilder *builder;
GtkWidget *window;

gtk_init(&argc, &argv);

builder = gtk_builder_new();
gtk_builder_add_from_file (builder, "Testgui.glade", NULL);

window = GTK_WIDGET(gtk_builder_get_object(builder, "window1"));
gtk_builder_connect_signals(builder, NULL);

g_object_unref(builder);

gtk_widget_show(window);
gtk_main();

return 0;
}

void prg_dac1(){
write_dac(gtk_spin_button_get_value_as_int(spin1),1,2);
}

void prg_dac2(){
write_dac(gtk_spin_button_get_value_as_int(spin2),2,2);
}

void prg_dac3(){
write_dac(gtk_spin_button_get_value_as_int(spin3),3,2);
}

void prg_dac4(){
write_dac(gtk_spin_button_get_value_as_int(spin4),4,2);
}

void prg_dac5(){
write_dac(gtk_spin_button_get_value_as_int(spin5),5,2);
}

这是我保存为 GtkBuilder 文件的 Gladeproject:

<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
<object class="GtkAdjustment" id="dacwerte1">
<property name="upper">65535</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkAdjustment" id="dacwerte2">
<property name="upper">65535</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkAdjustment" id="dacwerte3">
<property name="upper">65535</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkAdjustment" id="dacwerte4">
<property name="upper">65535</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkAdjustment" id="dacwerte5">
<property name="upper">65535</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<child>
<object class="GtkGrid" id="grid2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel" id="label5">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">DAC2</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">DAC3</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">DAC4</property>
</object>
<packing>
<property name="left_attach">3</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label8">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">DAC5</property>
</object>
<packing>
<property name="left_attach">4</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button1">
<property name="label" translatable="yes">button</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="prg_dac1" swapped="no"/>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">3</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button2">
<property name="label" translatable="yes">button</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="prg_dac2" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">3</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button3">
<property name="label" translatable="yes">button</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="prg_dac3" swapped="no"/>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">3</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button4">
<property name="label" translatable="yes">button</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="prg_dac4" swapped="no"/>
</object>
<packing>
<property name="left_attach">3</property>
<property name="top_attach">3</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button5">
<property name="label" translatable="yes">button</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="prg_dac5" swapped="no"/>
</object>
<packing>
<property name="left_attach">4</property>
<property name="top_attach">3</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkToolbar" id="toolbar1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="toolbar_style">icons</property>
<property name="icon_size">10</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
<property name="width">5</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="DAC">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">DAC1</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spin1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="max_length">5</property>
<property name="invisible_char">●</property>
<property name="activates_default">True</property>
<property name="width_chars">10</property>
<property name="invisible_char_set">True</property>
<property name="adjustment">dacwerte1</property>
<property name="climb_rate">1</property>
<property name="update_policy">if-valid</property>
<signal name="editing-done" handler="set_dac1" swapped="no"/>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spin5">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="max_length">5</property>
<property name="invisible_char">●</property>
<property name="width_chars">10</property>
<property name="invisible_char_set">True</property>
<property name="adjustment">dacwerte5</property>
<property name="climb_rate">0.02</property>
<property name="numeric">True</property>
</object>
<packing>
<property name="left_attach">4</property>
<property name="top_attach">2</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spin4">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="max_length">5</property>
<property name="invisible_char">●</property>
<property name="width_chars">10</property>
<property name="invisible_char_set">True</property>
<property name="adjustment">dacwerte4</property>
<signal name="editing-done" handler="set_dac4" swapped="no"/>
</object>
<packing>
<property name="left_attach">3</property>
<property name="top_attach">2</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spin3">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="max_length">5</property>
<property name="invisible_char">●</property>
<property name="width_chars">10</property>
<property name="invisible_char_set">True</property>
<property name="adjustment">dacwerte3</property>
<property name="update_policy">if-valid</property>
<signal name="editing-done" handler="set_dac3" swapped="no"/>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">2</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spin2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="max_length">5</property>
<property name="invisible_char">●</property>
<property name="width_chars">10</property>
<property name="invisible_char_set">True</property>
<property name="input_purpose">number</property>
<property name="adjustment">dacwerte2</property>
<property name="wrap">True</property>
<signal name="editing-done" handler="set_dac2" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">2</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkWindowGroup" id="windowgroup1"/>
</interface>

此外,我还收到有关 GtkWidget 指针 spin1 等数据类型的编译警告。但是将数据类型更改为适当的 GtkSpinButton 也没有帮助。

main.c: In function ‘prg_dac1’: main.c:116:45: warning: passing argument 1 of ‘gtk_spin_button_get_value_as_int’ from incompatible pointer type write_dac(gtk_spin_button_get_value_as_int(spin1),1,2); ^ In file included from /usr/include/gtk-3.0/gtk/gtk.h:185:0, from main.c:4: /usr/include/gtk-3.0/gtk/gtkspinbutton.h:194:7: note: expected ‘struct GtkSpinButton *’ but argument is of type ‘struct GtkWidget *’ gint gtk_spin_button_get_value_as_int (GtkSpinButton *spin_button);

最佳答案

您永远不会将 spin1 等分配给 Glade 文件中的对象。看gtk_builder_get_object() .

要消除类型警告,请在调用站点使用显式转换并将变量类型保留为 GtkWidget。 GTK+ 提供了您可以使用的特殊宏:

    write_dac(gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin1)),1,2);

关于c - Gtk:Gtk-CRITICAL **:gtk_spin_button_get_value_as_int:断言 'GTK_IS_SPIN_BUTTON (spin_button)' 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40355781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com