如何计算 Gtk::Grid 中存储的小部件?
How can I count the widgets stored in a Gtk::Grid?
我正在寻找等同于某些 QT 表达式的几种 gtkmm methods/data 类型:
给定 QT 中的小部件容器(例如 QBoxLayout
),一个简单的方法称为 count()
returns 存储在给定容器中的小部件数量。交换 QBoxLayout 或任何 QT 小部件容器的最佳方式是 Gtk::Grid
。但是没有简单的方法来获取其中的小部件数量。与 Gtk::Box
.
相同
我需要该方法来迭代存储在网格中的孩子:
for(auto& it : layouts) { //layouts is a vector of Gtk::Grids
for(int i = 0; i < it->size(); ++i) {
if(it->get_child_at(0, i)) {
it->get_child_at(0, i)->set_visible((std::string(it->get_name())== StringID));
}
QT 使用 QWidget
作为 object 不受限于任何小部件类型(例如按钮或复选框..)。这在 gtkmm 中是不可能的,因为小部件只能通过对小部件类型的引用来初始化。现在我正在寻找用具有小部件向量的 gtkmm 替换 QT 代码。我用 Gtk::Box 来替换 QWidgets。那是一个合理的替代品吗?我在更换他们的规模时遇到了麻烦,最初是使用 QSize
处理的,需要两个数字“高度”和“长度”。现在有一个 Gtk::Scale
class,但它以不同的方式工作..
所有 Gtkmm 容器(如 Gtk::Grid
)继承自 Gtk::Container
,这使得以下方法可用:
std::vector<Widget*> get_children() // Non const: to modify the widgets
std::vector<const Widget*> get_children () const // const: for read operations
这些方法 return 正是您想要的:小部件向量。您可以在 returned std::vector
上使用 size()
来计算容器中的 wigets 数量。
此外,在我看来,Gtk::Box
很少有用,因为它非常有限。 Gtk::Grid
几乎总是更好的选择。
最后,在 Qt 中,所有图形元素都继承自 QWidget
。在 Gtkmm 中,所有小部件都继承自 Gtk::Widget
,这意味着您可以这样写:
Gtk::Widget* pButton = new Gtk::Button("My button");
然后使用 pButton
,它“不受任何小部件类型限制”。有关 Gtk::Widget
.
的更多信息,请参阅 the reference
Gtkmm4 更新
似乎 Gtk::Container
已在 Gtkmm4 中删除,如记录 here 所示。似乎没有什么可以取代它。不幸的是,在这个版本中,子控件跟踪似乎必须手动完成。
我正在寻找等同于某些 QT 表达式的几种 gtkmm methods/data 类型:
给定 QT 中的小部件容器(例如
相同QBoxLayout
),一个简单的方法称为count()
returns 存储在给定容器中的小部件数量。交换 QBoxLayout 或任何 QT 小部件容器的最佳方式是Gtk::Grid
。但是没有简单的方法来获取其中的小部件数量。与Gtk::Box
.我需要该方法来迭代存储在网格中的孩子:
for(auto& it : layouts) { //layouts is a vector of Gtk::Grids for(int i = 0; i < it->size(); ++i) { if(it->get_child_at(0, i)) { it->get_child_at(0, i)->set_visible((std::string(it->get_name())== StringID)); }
QT 使用
QWidget
作为 object 不受限于任何小部件类型(例如按钮或复选框..)。这在 gtkmm 中是不可能的,因为小部件只能通过对小部件类型的引用来初始化。现在我正在寻找用具有小部件向量的 gtkmm 替换 QT 代码。我用 Gtk::Box 来替换 QWidgets。那是一个合理的替代品吗?我在更换他们的规模时遇到了麻烦,最初是使用QSize
处理的,需要两个数字“高度”和“长度”。现在有一个Gtk::Scale
class,但它以不同的方式工作..
所有 Gtkmm 容器(如 Gtk::Grid
)继承自 Gtk::Container
,这使得以下方法可用:
std::vector<Widget*> get_children() // Non const: to modify the widgets
std::vector<const Widget*> get_children () const // const: for read operations
这些方法 return 正是您想要的:小部件向量。您可以在 returned std::vector
上使用 size()
来计算容器中的 wigets 数量。
此外,在我看来,Gtk::Box
很少有用,因为它非常有限。 Gtk::Grid
几乎总是更好的选择。
最后,在 Qt 中,所有图形元素都继承自 QWidget
。在 Gtkmm 中,所有小部件都继承自 Gtk::Widget
,这意味着您可以这样写:
Gtk::Widget* pButton = new Gtk::Button("My button");
然后使用 pButton
,它“不受任何小部件类型限制”。有关 Gtk::Widget
.
Gtkmm4 更新
似乎 Gtk::Container
已在 Gtkmm4 中删除,如记录 here 所示。似乎没有什么可以取代它。不幸的是,在这个版本中,子控件跟踪似乎必须手动完成。