【问题标题】:How to align elements with GTK library in C/C++如何在 C/C++ 中将元素与 GTK 库对齐
【发布时间】:2022-01-16 23:01:06
【问题描述】:

我在使用 C/C++ 中的 GTK+ 库时遇到了一些问题。 我有一个简单的 GTK 表,其中第一列和第三列包含带有描述的标签。特别是第一个是正在执行的测试的名称。三是对测试运行状态的描述。

第二列包含进度条,每行一个,从图中可以看出,它们与同一行的标签不对齐。

我该如何解决这个问题?这是一个简短且可重复的示例,显示了我的问题:

int main (int argc, char *argv[]) {

gtk_init (&argc, &argv);
GtkWidget *win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_fullscreen(GTK_WINDOW(win)); 
g_signal_connect (win, "delete_event", G_CALLBACK (gtk_main_quit),NULL);
GtkWidget *names[7], *states[7], *bars[7];
GtkWidget *table = gtk_table_new (7, 3, TRUE);
for ( int i = 0 ; i < 7 ; i++ ){

    names[i] = gtk_label_new( std::string("Name" + std::to_string(i)).c_str() );
    states[i] = gtk_label_new("Waiting Mode");
    bars[i] = gtk_progress_bar_new();
    gtk_table_attach_defaults (GTK_TABLE (table), names[i] , 0, 1, i, i+1);     
    gtk_table_attach_defaults (GTK_TABLE (table), bars[i] , 1, 2, i, i+1);      
    gtk_table_attach_defaults (GTK_TABLE (table), states[i] , 2, 3, i, i+1);        
}

gtk_container_add (GTK_CONTAINER (win), table);
gtk_widget_show_all (win);
gtk_main ();
return 0;
}

您将获得的 GUI 是这个: img

【问题讨论】:

  • 不行,我需要至少10个声望才能直接添加截图
  • 好的,没错。如果您可以添加一个最小且可重现的示例(在代码中)来重现您的问题,这也会有所帮助。没有任何代码,我们无能为力。
  • 我添加了一个显示我的问题的示例,我还刷新了图像:)
  • stackoverflow.com/questions/22272446/… 是否回答了您的问题?还请指定您使用的 Gtk 库的版本。

标签: c++ alignment gtk


【解决方案1】:

您需要使用gtk_widget_valign_set 设置进度条小部件的垂直对齐方式。使用您提供的示例:

    // ...

    for ( int i = 0 ; i < 7 ; i++ ){
    
        names[i] = gtk_label_new(std::string("Name" + std::to_string(i)).c_str());
        states[i] = gtk_label_new("Waiting Mode");
        bars[i] = gtk_progress_bar_new();

        // Align vertically in the table:
        gtk_widget_set_valign(bars[i], GTK_ALIGN_CENTER);

        gtk_table_attach_defaults(GTK_TABLE(table), names[i]  , 0, 1, i, i+1);     
        gtk_table_attach_defaults(GTK_TABLE(table), bars[i]   , 1, 2, i, i+1);      
        gtk_table_attach_defaults(GTK_TABLE(table), states[i] , 2, 3, i, i+1);        
    }
    
    // ...

使用 Gtkmm 3.24,这会产生:

由于您似乎已经在使用 C++,我建议您检查 Gtkmm,它是 Gtk+ 的 C++ 包装器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 2021-07-30
    • 2021-01-19
    • 1970-01-01
    • 2014-12-01
    • 2017-09-01
    相关资源
    最近更新 更多