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"));
从一个 Gtk::Builder 我已经尝试从一个名为 listbox_serverlist
.
这是我认为总结出来的一小段代码:
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"));