我创建了一个带有 3 个子项、一个标签和 2 个按钮的 action_bar 小部件。我在 gtk_widget_set_size_request() 方法中尝试了多种宽度和高度尺寸。无论我设置的尺寸是多少...
我创建了一个带有 3 个子项、一个标签和 2 个按钮的 action_bar 小部件。我在该方法中尝试了多种宽度和高度尺寸 gtk_widget_set_size_request()
。无论我将操作栏的尺寸设置为多少,无论窗口本身的大小如何,操作栏的高度始终相同。
这是我为整个项目编写的代码。很抱歉,所有代码都挤在一起了。我遇到了一些复制和粘贴问题...
#include <gtk/gtk.h>
#include <pango/pango.h>
#include <stdio.h>
//READERS! This code is meant to be easily read for people who want to learn!
//Handles initializing the window
static void activateWindow(GtkApplication *app) {
GtkWidget *window = gtk_application_window_new(app);
//TopActionBar | Creation
GtkWidget *topActionBar = gtk_action_bar_new();
//This line is the issue.
gtk_widget_set_size_request(GTK_WIDGET(topActionBar), -1, 17);
//TopActionBar | TITLE
GtkWidget *bideLabel = gtk_label_new(NULL);
gchar *bideLabelText = g_markup_printf_escaped("<b>BIDE</b>");
gtk_label_set_markup(GTK_LABEL(bideLabel), bideLabelText);
gtk_action_bar_pack_start(GTK_ACTION_BAR(topActionBar), GTK_WIDGET(bideLabel));
//TopActionBar | Open Folder Button
GtkWidget *openFolder = gtk_button_new();
gtk_button_set_label(GTK_BUTTON(openFolder), "Open Folder");
gtk_action_bar_pack_start(GTK_ACTION_BAR(topActionBar), GTK_WIDGET(openFolder));
//TopActionBar | Help Menu Button
gchar *helpButtonText = g_markup_printf_escaped("<u>HELP</u>");
GtkWidget *helpButton = gtk_button_new();
GtkWidget *helpLabel = gtk_label_new("Help");
gtk_label_set_markup(GTK_LABEL(helpLabel), helpButtonText);
gtk_button_set_child(GTK_BUTTON(helpButton), GTK_WIDGET(helpLabel));
gtk_action_bar_pack_start(GTK_ACTION_BAR(topActionBar), GTK_WIDGET(helpButton));
gtk_window_set_child(GTK_WINDOW(window), GTK_WIDGET(topActionBar));
gtk_window_present(GTK_WINDOW(window));
}
int main(int argc, char *argv[]){
GtkApplication *app = gtk_application_new("me.lufthor.bide", G_APPLICATION_DEFAULT_FLAGS);
g_signal_connect(app, "activate", G_CALLBACK(activateWindow), NULL);
return g_application_run(G_APPLICATION(app), argc, argv);
}
我尝试调整高度和宽度值,但没有任何变化。
您正在尝试为操作栏设置大小。虽然从技术上讲它是一个小部件,但它首先是一个容器。作为容器,它本身没有大小。操作栏大小是根据它所属的容器(应用程序窗口)和容器内的小部件(按钮)计算得出的。
因此,如果您想看到尺寸差异 action_bar
- 您可以更改其中按钮的尺寸。只需增大(或缩小)按钮 - 操作栏应自动适应它。
但是此代码还存在“外部”问题。您的 action bar
是窗口的唯一子项。因此,无论您为按钮定义什么大小 - 您都不会看到它,因为在这种情况下,操作栏将增长到窗口的内部高度。要查看 的不同大小 action bar
,我们需要 action bar
和其他东西。 action bar
总是自动水平增长,但具有固定的高度(这取决于栏内的按钮)。因此,我们需要在操作栏下方有另一个小部件,具有垂直自动调整大小的功能,以便操作栏可以保留其手动定义的高度。
因此,在您的代码中,不要只写一行:
gtk_window_set_child(GTK_WINDOW(window), GTK_WIDGET(topActionBar));
你需要这样做:
// The box is a layout container which holds other widgets
GtkWidget *box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
// The child of a window must be a top layout widget
gtk_window_set_child (GTK_WINDOW (window), box);
// Almost any widget is good for this example.
// The scrolled window is good enough.
GtkWidget *sw = gtk_scrolled_window_new ();
gtk_widget_set_vexpand (sw, TRUE);
// Now add both widgets into the layout container
gtk_box_append (GTK_BOX (box), topActionBar);
gtk_box_append (GTK_BOX (box), sw);
// and the next line will do what you want
gtk_widget_set_size_request(GTK_WIDGET(helpLabel), -1, 200);