我从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)
此后,我立即运行列表框所在的主窗口。
我的问题是,尽管列表框导致不为空,但其中肯定没有任何文本。我希望标签在列表框中显示为一个项目,但似乎有一个可选项目,但它完全空白。
我是否必须编写任何代码来更新标签中的实际文本,或达到此目的的某些内容?
我希望我的问题很清楚,但我很乐意提供更多信息。
答案 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);
}
我的猜测是:您正在使用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"));