私はこの空き地 (およびこのフォーラム) に慣れていないので、どなたか助けていただけるかどうかを知りたいです:
ユーザーが選択ボタンから選択したファイル名を取得し、それを文字列として関数に送信する必要があります。残念ながら、私はこの迷惑なエラーを受け取りました:
Gtk-CRITICAL **: IA__gtk_file_chooser_get_uri: アサーション `GTK_IS_FILE_CHOOSER (chooser)' が失敗しました
ウィジェットの使い方が間違っていたのだと思いました。誰かがこれを理解するのを手伝ってくれますか? ソース コードを以下に示します。ご覧のとおり、https: //live.gnome.org/Glade/Tutorials にある Glade-GTK チュートリアルからのものです。
プログラムは単純な 2 ボタン ウィンドウです。最初のボタンはファイル選択ボタンで、2 番目のボタンはクリックすると "clica" 関数を呼び出す標準ボタンです。ユーザーがファイル選択ボタンで選択したファイル名を表示する必要がありますが、そのときにエラーが発生します。
テスト ソース (ウィジェットの使用方法を把握するため):
#include <gtk/gtk.h>
int
main( int argc,
char **argv )
{
GtkBuilder *builder;
GtkWidget *window;
GError *error = NULL;
/* Init GTK+ */
gtk_init( &argc, &argv );
/* Create new GtkBuilder object */
builder = gtk_builder_new();
/* Load UI from file. If error occurs, report it and quit application.
* Replace "tut.glade" with your saved project. */
if( ! gtk_builder_add_from_file( builder, "tut.glade", &error ) )
{
g_warning( "%s", error->message );
g_free( error );
return( 1 );
}
/* Get main window pointer from UI */
window = GTK_WIDGET( gtk_builder_get_object( builder, "window1" ) );
/* Connect signals */
gtk_builder_connect_signals( builder, NULL );
/* Destroy builder, since we don't need it anymore */
g_object_unref( G_OBJECT( builder ) );
/* Show window. All other widgets are automatically shown by GtkBuilder */
gtk_widget_show( window );
/* Start main loop */
gtk_main();
return( 0 );
}
void clica(GtkFileChooser *filechooserbutton1){//this button was inserted through Glade
char cNome[250];
*cNome = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(filechooserbutton1));
printf("\n%s", cNome);
}
グレードファイル:
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.24"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<child>
<object class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkFileChooserButton" id="filechooserbutton1">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</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>
<property name="use_action_appearance">False</property>
<signal name="clicked" handler="clica" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>