gtkmm标签未成功插入到ListBox中

时间:2018-12-26 00:32:32

标签: c++ gtk3 gtkmm

我从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)

此后,我立即运行列表框所在的主窗口。

我的问题是,尽管列表框导致不为空,但其中肯定没有任何文本。我希望标签在列表框中显示为一个项目,但似乎有一个可选项目,但它完全空白。

我是否必须编写任何代码来更新标签中的实际文本,或达到此目的的某些内容?

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

3 个答案:

答案 0 :(得分:2)

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

或者,将docs列表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

答案 1 :(得分:2)

因为“对我有用”:

#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);
}

enter image description here

我的猜测是:您正在使用Gtk::Widget::show_all()吗?我发现出于某些原因,Gtk :: Widget :: show()对于某些小部件层次结构还不够。另外,我在3.91 reference中找不到它,所以也许情况会改变吗?

答案 2 :(得分:0)

对于其他遇到此问题的人,我建议添加 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"));