GtkScale(1)
GtkScale(2)
GtkScale(3)
GtkScale(4)
这一篇将学习记录scale的相关signal
。
例子
#include <gtk/gtk.h>
static GtkWidget *create_window(const gint, const gint);
static gchar *format_value_callback(GtkScale *scale, gdouble value)
{
return g_strdup_printf("-->\%0.*f<--",
gtk_scale_get_digits(scale), value);
}
int main(int argc, char *argv[])
{
gtk_init(&argc, &argv);
GtkWidget *window;
GtkAdjustment *adjustment;
GtkWidget *scale;
/// *** Create a Window
window = create_window(400, 300);
/// *** Create the adjustment
adjustment = gtk_adjustment_new(0.0, 0.0, 10.0, 1.0, 2.0, 0.0);
/// *** Create the scale
scale = gtk_scale_new(GTK_ORIENTATION_HORIZONTAL, adjustment);
g_object_set(scale,
/// *** GtkScale 特性
"digits", 2,
"parent", window,
NULL);
g_signal_connect_swapped(scale, "format-value", G_CALLBACK(format_value_callback), scale);
gtk_widget_show_all(window);
gtk_main();
}
static GtkWidget *create_window(const gint w, const gint h)
{
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_window_set_default_size(GTK_WINDOW(window), w, h);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_title(GTK_WINDOW(window), "Hello GTK3");
gtk_container_set_border_width(GTK_CONTAINER(window), 50);
return window;
}
- 运行效果
GtkRange
— signals
void move_slider_callback(GtkRange *scale, GtkScrollType step)
{
if (GTK_IS_SCALE(scale))
{
if (step == GTK_SCROLL_STEP_UP)
g_print("GTK_SCROLL_STEP_UP: %f\n", gtk_range_get_value(scale));
else if (step == GTK_SCROLL_STEP_DOWN)
g_print("GTK_SCROOL_STEP_DOWN: %f\n", gtk_range_get_value(scale));
/// .....
}
}
int main(..)
{
// ...
/// *** 这里的signal需要使用键盘触发,例如上下左右
g_signal_connect_swapped(scale, "move-slider", G_CALLBACK(move_slider_callback), scale);
// ....
}