gpt4 book ai didi

c++ - Linux/C++ 帮助 glade3 和 gtkmm

转载 作者:行者123 更新时间:2023-11-30 02:11:40 27 4
gpt4 key购买 nike

这是一个 C 应用程序源代码,它使用 Glade3 和 GTK2+ 创建 GUI:

// gcc -o simple simple.c $(pkg-config --cflags --libs gtk+-2.0 gmodule-2.0)


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <gtk/gtk.h>

GtkBuilder *builder;
GtkWidget *window1;

G_MODULE_EXPORT void on_window1_destroy (GtkObject *object, gpointer user_data)
{
gtk_main_quit();
}

G_MODULE_EXPORT void on_button2_clicked (GtkObject *object, gpointer user_data)
{
gtk_main_quit();
}

G_MODULE_EXPORT void on_button1_clicked (GtkObject *object, gpointer user_data)
{
const gchar *name;
GtkWidget *name_entry = GTK_WIDGET(gtk_builder_get_object(builder, "entry1"));
name = gtk_entry_get_text(GTK_ENTRY(name_entry));
g_print("Name is: %s\n", name);
}

int main(int argc, char** argv)
{
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.*/
if( ! gtk_builder_add_from_file( builder, "simple.glade", &error ) )
{
g_warning( "%s", error->message );
g_free( error );
return( 1 );
}

/* Get main window pointer from UI */
window1 = 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( window1 );

/* Start main loop */
gtk_main();

return( 0 );
}

和林间空地文件:

<?xml version="1.0"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="window1">
<signal name="destroy" handler="on_window1_destroy"/>
<child>
<object class="GtkTable" id="table1">
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_columns">2</property>
<child>
<object class="GtkHButtonBox" id="hbuttonbox1">
<property name="visible">True</property>
<child>
<object class="GtkButton" id="button1">
<property name="label" translatable="yes">OK</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="on_button1_clicked"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkHButtonBox" id="hbuttonbox2">
<property name="visible">True</property>
<child>
<object class="GtkButton" id="button2">
<property name="label" translatable="yes">Exit</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="on_button2_clicked"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="label" translatable="yes">Enter your name:</property>
</object>
</child>
<child>
<object class="GtkEntry" id="entry1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">&#x25CF;</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
</object>
</child>
</object>
</interface>

现在我想用 C++ 编写这个应用程序。任何人都可以使用 gtkmm 给出示例或教程吗?或者更好地为我转换这个简单的例子?提前致谢!

最佳答案

我建议您阅读 gtkmm tutorial .

我可以懒得把它全部转换,但它看起来像这样:

void button1_clicked()
{
...
}

int main(int argc, char argv)
{
Gtk::Main kit(argc, argv);

Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file("my_gui.ui");

Gtk::Window *window1 = 0;
builder->get_widget("window1", window1);
Gtk::Button *button1 = 0;
builder->get_widget("button1", button1);
// get other widgets
...

button1->signal_clicked().connect(sigc::mem_fun(*this, &button1_clicked));

// connect more signals
...

Gtk::Main::run(*m_main_window);

return 0;
}

请注意,在使用 gtkmm 时,您不能使用 Glade 连接信号,您需要手动连接。

关于c++ - Linux/C++ 帮助 glade3 和 gtkmm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3117965/

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