上一节中我在一个窗口中插入了一个文本标签,并且这个标签的内容是可以选择的。但是如何在一个窗口中插入两个标签呢?像上节那样是不行的,第二个标签会覆盖第一个标签,最后只能看到第一个标签。想要显示二个标签就要对窗口进行布局了,这里我用box这个布局。显示效果如下:
先上代码。
#include <gtk/gtk.h>
static void activate(GtkApplication *app, gpointer user_data)
{
GtkWidget *window;
GtkWidget *label1;
GtkWidget *label2;
GtkWidget *hbox;
window = gtk_application_window_new(app);
gtk_window_set_title(GTK_WINDOW(window), "可以复制的文本标签");
gtk_window_set_default_size(GTK_WINDOW(window), 400, 200);
label1 = gtk_label_new("中华人民共和国万岁!!");
label2 = gtk_label_new("中国人民万岁!!");
gtk_label_set_selectable(GTK_LABEL(label1), TRUE);
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 50);
gtk_box_append(GTK_BOX(hbox), label1);
gtk_box_append(GTK_BOX(hbox), label2);
gtk_window_set_child(GTK_WINDOW(window), hbox);
gtk_widget_set_visible(window, TRUE);
}
int main(int argc, char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new("xan.mo", G_APPLICATION_DEFAULT_FLAGS);
g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
status = g_application_run(G_APPLICATION(app), argc, argv);
g_object_unref(app);
return status;
}
box布局也是用GtkWidget来声明的,因为这是一个横向的布局,所以我用hbox来命名。创建box的函数是gtk_box_new(GtkOrientation orientation, int spacing),第一个参数是创建的box的式样,有横向GTK_ORIENTATION_HORIZONTAL和 纵向GTK_ORIENTATION_VERTICAL两个选项,本节的例子用的就是横向的。第二个参数是布局内控件之间的距离,单位是象素。本例中的50表示标签1和标签2之间的横向距离是50个象素。把控件装入box布局用的函数是gtk_box_append(GtkBox* box,GtkWidget * child)函数,第一个参数是box控件,第二个参数是要装入box中的控件。把2个标签装入box布局后,再把box布局设置成窗口的子控件。
显示这些控件我用了gtk_widget_set_visible(GtkWidget * widget, gboolean visible),第二个参数是boolean参数,只有TRUE和FALSE两个选项,TRUE表示显示,FALSE表示不显示。当然也可以用上节的函数来显示,只是这个函数通用性更强一些。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved