Gtkmm 标签未成功插入列表框

Gtkmm label not successfully being inserted into a ListBox

从一个 Gtk::Builder 我已经尝试从一个名为 listbox_serverlist.

的空地文件中指向一个 Gtk::ListBox 的指针

这是我认为总结出来的一小段代码:

Gtk::ListBox* listbox_serverlist;
builder->get_widget("listbox_serverlist", listbox_serverlist);

Gtk::Label l;
l.set_text("Test");
listbox_serverlist->insert(l, -1)

紧接着,我 运行 列表框所在的主要 window。

我的问题是,虽然列表框不是空的,但其中肯定没有任何文本。我希望我的标签作为一个项目出现在列表框中,但似乎只有一个可选择的项目,但它是完全空白的。

是否有任何我必须编写的代码来更新标签中的实际文本,或者类似的东西?

我希望我的问题很清楚,但我很乐意提供更多信息。

您必须插入一个 ListBoxRow,然后将标签添加到行中。

或者,docs list gtk_container_add() 作为解决方案。

编辑

我不擅长 C++,但像这样应该可以解决问题:

Gtk::ListBoxRow* list_box_row;
list_box_row.add(l); //add label widget to row
listbox_serverlist.add(list_box_row);  //add row to listbox

自 "it works for me":

#include <gtkmm.h>

int main()
{
    auto Application = Gtk::Application::create();
    Gtk::Window window;
    Gtk::ListBox listbox;
    window.add(listbox);
    Gtk::Label label, label2;
    label.set_text("asdf");
    label2.set_text("qwer");
    listbox.add(label);
    listbox.insert(label2, -1);
    window.show_all();
    return Application->run(window);
}

我的猜测是:您是否在使用 Gtk::Widget::show_all()? I have found that for some reason Gtk::Widget::show() was not enough for some hierarchies of widgets. Also I can't find it in 3.91 reference,所以这可能会改变?

对于遇到此问题的任何其他人,我建议添加 Gtk::manage(WIDGET);

示例:

class MyListRow : public Gtk::ListBoxRow {
  private:
    Gtk::Label label;
    Gtk::Box box;

  public:
    MyListRow(char const *appID) {
        label.set_label(appID);
        box.pack_start(label, Gtk::PACK_START, 0);
        add(box);
        show_all();
        Gtk::manage(this);
    }
};

主要内容:

listBox->append(*new MyListRow("title"));